Создание ресурсов для различных экрановCreating resources for varying screens

Android работает на многих разных устройствах, каждый из которых имеет широкий спектр разрешений, размеров экрана и плотности экрана.Android itself runs on many different devices, each having a wide variety of resolutions, screen sizes, and screen densities. Android выполнит масштабирование и измените размер, чтобы приложение работало на этих устройствах, но это может привести к неоптимальному взаимодействии с пользователем.Android will perform scaling and resizing to make your application work on these devices, but this may result in a sub-optimal user experience. Например, изображения могут выглядеть размытыми, или же они могут располагаться как ожидается в представлении.For example, images could appear blurry, or they may be positioned as expected on a view.

Основные понятияConcepts

Для обеспечения поддержки нескольких экранов важно понимать несколько терминов и концепций.A few terms and concepts are important to understand to support multiple screens.

  • Размер экрана – Объем физического пространства для отображения приложенияScreen Size – The amount of physical space for displaying your application

  • Плотность экрана – Количество пикселей в любой заданной области экрана.Screen Density – The number of pixels in any given area on the screen. Типичная единица измерения — точка на дюйм (DPI).The typical unit of measure is dots per inch (dpi).

  • Решение – Общее количество пикселей на экране.Resolution – The total number of pixels on the screen. При разработке приложений разрешение не так важно, как размер и плотность экрана.When developing applications, resolution is not as important as screen size and density.

  • Независимый от плотности пиксель (DP) – Виртуальная единица измерения, позволяющая разрабатывать макеты независимо от плотности.Density-independent pixel (dp) – A virtual unit of measure to allow layouts to be designed independent of density. Эта формула используется для преобразования точки DP в экранные пиксели:This formula is used to convert dp into screen pixels:

    px = DP × dpi 160÷px = dp × dpi ÷ 160

  • Ориентация страницы – Ориентация экрана считается альбомной, если она шире, чем высота.Orientation – The screen's orientation is considered to be landscape when it is wider than it is tall. В отличие от ориентации, книжная ориентация имеет значение, когда высота экрана превышает ширину.In contrast, portrait orientation is when the screen is taller than it is wide. Ориентация может измениться в течение времени существования приложения, когда пользователь поворачивает устройство.The orientation can change during the lifetime of an application as the user rotates the device.

Обратите внимание, что первые три из этих концепций являются – взаимосвязанными. Увеличение разрешения не приводит к увеличению размера экрана.Notice that the first three of these concepts are inter-related – increasing the resolution without increasing the density will increase the screen size. Однако при увеличении плотности и разрешения размер экрана может остаться неизменным.However if both the density and resolution are increased, then the screen size can remain unchanged. Такая связь между размером экрана, плотностью и разрешением усложняет поддержку экрана.This relationship between screen size, density, and resolution complicate screen support quickly.

Для решения этой сложности платформа Android предпочитает использовать аппаратно-независимые пиксели (DP) для макетов экрана.To help deal with this complexity, the Android framework prefers to use density-independent pixels (dp) for screen layouts. Используя независимые от плотности Пиксели, элементы пользовательского интерфейса будут отображаться для одного и того же физического размера на экранах с различной плотностью.By using density independent pixels, UI elements will appear to the user to have the same physical size on screens with different densities.

Поддержка различных размеров и плотности экранаSupporting various screen sizes and densities

Android обрабатывает большую часть работы, чтобы правильно отобразить макеты для каждой конфигурации экрана.Android handles most of the work to render the layouts properly for each screen configuration. Однако есть некоторые действия, которые можно предпринять, чтобы помочь системе.However, there are some actions that can be taken to help the system out.

Использование независимых от плотности пикселей вместо фактических пикселей в макетах является достаточным в большинстве случаев для обеспечения независимости от плотности.The use of density-independent pixels instead of actual pixels in layouts is sufficient in most cases to ensure density independence. Android будет масштабировать драваблес во время выполнения до соответствующего размера.Android will scale the drawables at runtime to the appropriate size. Однако возможно, что масштабирование приведет к неразмытому появлению растровых изображений.However, it is possible that scaling will cause bitmaps to appear blurry. Чтобы обойти эту проблему, предоставьте альтернативные ресурсы для другой плотности.To work around this problem, supply alternate resources for the different densities. При проектировании устройств для нескольких разрешений и плотности экрана будет проще начать с более высокого разрешения или плотности изображения, а затем уменьшить масштаб.When designing devices for multiple resolutions and screen densities, it will prove easier to start with the higher resolution or density images and then scale down.

Объявление поддерживаемого размера экранаDeclare the supported screen size

Объявление размера экрана гарантирует, что только поддерживаемые устройства смогут скачать приложение.Declaring the screen size ensures that only supported devices can download the application. Это достигается путем установки элемента поддержки-screens в файле AndroidManifest. XML .This is accomplished by setting the supports-screens element in the AndroidManifest.xml file. Этот элемент используется для указания того, какие размеры экрана поддерживаются приложением.This element is used to specify what screen sizes are supported by the application. Данный экран считается поддерживаемым, если приложение может правильно расположить макеты для заполнения экрана.A given screen is considered to be supported if the application can properly place its layouts to fill screen. С помощью этого элемента манифеста приложение не будет отображаться в Google Play для устройств, которые не соответствуют спецификациям экрана.By using this manifest element, the application will not show up in Google Play for devices that do not meet the screen specifications. Однако приложение по-прежнему будет работать на устройствах с неподдерживаемыми экранами, но макеты могут выглядеть размытыми и пикселизованным.However, the application will still run on devices with unsupported screens, but the layouts may appear blurry and pixelated.

Поддерживаемые экранные Сиксес объявляются в файле задающий свойства/AndroidManifest. XML решения:Supported screen sixes are declared in the Properites/AndroidManifest.xml file of the solution:

Измените AndroidManifest. XML , чтобы включить поддержку экранов:Edit AndroidManifest.xml to include supports-screens:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
          android:versionCode="1"
          android:versionName="1.0"
          package="HelloWorld.HelloWorld">
      <uses-sdk android:minSdkVersion="21" android:targetSdkVersion="27" />
      <supports-screens android:resizable="true"
                        android:smallScreens="true"
                        android:normalScreens="true"
                        android:largeScreens="true" />
      <application android:allowBackup="true"
                   android:icon="@mipmap/ic_launcher"
                   android:label="@string/app_name"
                   android:roundIcon="@mipmap/ic_launcher_round"
                   android:supportsRtl="true" android:theme="@style/AppTheme">
  </application>
</manifest>

Предоставление альтернативных макетов для различных размеров экранаProvide alternate layouts for different screen sizes

Альтернативные макеты позволяют настроить представление для размера экрана спеЦифк, изменяя положение или размер элементов пользовательского интерфейса компонента.Alternate layouts make it possible to customize a view for a specifc screen size, changing the positioning or size of the component UI elements.

Начиная с уровня API 13 (Android 3,2), размеры экранов не рекомендуются в пользу использования квалификатора SWNDP.Starting with API Level 13 (Android 3.2), the screen sizes are deprecated in favor of using the swNdp qualifier. Этот новый квалификатор объявляет объем пространства, необходимого для данного макета.This new qualifier declares the amount of space a given layout needs. Рекомендуется, чтобы приложения, предназначенные для работы на Android 3,2 или более поздней версии, использовали эти более новые квалификаторы.It is recommended that applications that are meant to run on Android 3.2 or higher should be using these newer qualifiers.

Например, если для макета требуется минимальная 700-я точка в ширину экрана, альтернативный макет будет находиться в макете папки — sw700dp:For example, if a layout required a minimum 700 dp of screen width, the alternate layout would go in a folder layout-sw700dp:

Ниже приведены некоторые значения для различных устройств.As a guideline, here are some numbers for various devices:

  • Обычный телефон – 320 DP: обычный телефонTypical phone – 320 dp: a typical phone

  • Устройство с 5 "планшетом/" или "tween-анимацией" – 480 DP: например, Примечание SamsungA 5" tablet / "tweener" device – 480 dp: such as the Samsung Note

  • 7 "планшетный 600 DP: например, Барнса & благородные Нук –A 7" tablet – 600 dp: such as the Barnes & Noble Nook

  • 10 "Планшет – 720 DP: например, ксум MotorolaA 10" tablet – 720 dp: such as the Motorola Xoom

Для приложений, предназначенных для уровней API до 12 (Android 3,1), макеты должны находиться в каталогах, использующих квалификаторы с небольшим/нормальным/размером/ксларже , как обобщения различные размеры экрана, доступные в большинстве устройств.For applications that target API levels up to 12 (Android 3.1), the layouts should go in directories that use the qualifiers small/normal/large/xlarge as generalizations of the various screen sizes that are available in most devices. Например, на рисунке ниже приведены дополнительные ресурсы для четырех различных размеров экрана:For example, in the image below, there are alternate resources for the four different screen sizes:

Ниже приведено сравнение того, как более старые квалификаторы размера экрана, предшествующие API уровня 13, сравниваются с пикселями, не зависящими от плотности.The following is a comparison of how the older pre-API Level 13 screen size qualifiers compare to density-independent pixels:

  • 426 DP x 320 DP невелика426 dp x 320 dp is small

  • 470 DP x 320 DP является нормальной470 dp x 320 dp is normal

  • 640 DP x 480 DP большие640 dp x 480 dp is large

  • 960 DP x 720 DP — ксларже960 dp x 720 dp is xlarge

Новые квалификаторы размера экрана на уровне API 13 и выше имеют более высокий приоритет, чем предыдущие квалификаторы экрана на уровнях API 12 и ниже.The newer screen size qualifiers in API level 13 and up have a higher precedence than the older screen qualifiers of API levels 12 and lower. Для приложений, которые будут охватывать старый и новый уровни API, может потребоваться создать альтернативные ресурсы с помощью обоих наборов квалификаторов, как показано на следующем снимке экрана:For applications that will span the old and the new API levels, it may be necessary to create alternate resources using both sets of qualifiers as shown in the following screenshot:

Укажите разные точечные рисунки для различной плотности экранаProvide different bitmaps for different screen densities

Несмотря на то, что Android будет масштабировать точечные рисунки по мере необходимости для устройства, растровые изображения могут не элегантной масштабирование. они могут стать нечеткими или размытыми.Although Android will scale bitmaps as necessary for a device, the bitmaps themselves may not elegantly scale up or down: they may become fuzzy or blurry. Предоставление точечных рисунков, подходящих для плотности экрана, снизит эту проблему.Providing bitmaps appropriate for the screen density will mitigate this problem.

Например, приведенный ниже рисунок представляет собой пример проблем макета и внешнего вида, которые могут возникнуть, если не предоставлены ресурсы с указанием плотности.For example, the image below is an example of layout and appearance problems that may occur when density-specify resources are not provided.

Снимки экрана без плотных ресурсов

Сравните это с макетом, который предназначен для ресурсов, зависящих от плотности:Compare this to a layout that is designed with density-specific resources:

Снимки экрана с ресурсами, зависящими от плотности

Создание ресурсов с различной плотностью с помощью Android Asset StudioCreate varying density resources with Android Asset Studio

Создание этих растровых изображений различной плотности может быть немного утомительным.The creation of these bitmaps of various densities can be a bit tedious. Таким образом, Google создал интерактивную служебную программу, которая может сократить некоторые долгой, связанные с созданием этих точечных рисунков под названием Android Asset Studio.As such, Google has created an online utility that can reduce some of the tedium involved with the creation of these bitmaps called the Android Asset Studio.

Android Asset StudioAndroid Asset Studio

Этот веб-сайт поможет при создании точечных рисунков, нацеленных на четыре распространенные плотности экрана, путем предоставления одного изображения.This website will help with creation of bitmaps that target the four common screen densities by providing one image. После этого Android Asset Studio создаст точечные рисунки с некоторыми настройками, а затем позволит скачать их в виде ZIP-файла.Android Asset Studio will then create the bitmaps with some customizations and then allow them to be downloaded as a zip file.

Советы по работе с несколькими экранамиTips for multiple screens

Android работает на ошеломляющей количестве устройств, и сочетание размеров экрана и плотности экрана может показаться огромным.Android runs on a bewildering number of devices, and the combination of screen sizes and screen densities can seem overwhelming. Приведенные ниже советы помогут сократить усилия, необходимые для поддержки различных устройств.The following tips can help minimize the effort necessary to support various devices:

  • Разработка и разработка только для того, что вам нужно – Существует множество различных устройств, но некоторые из них существуют в редких конструктивных факторах, которые могут требовать значительных усилий при проектировании и разработке.Only design and develop for what you need – There are many different devices out there, but some exist in rare form factors that may take significant effort to design and develop for. Панель мониторинга " размер и плотность экрана " — это страница, предоставляемая Google, которая предоставляет данные о декомпозиции размера экрана и матрицы плотности экрана.The Screen Size and Density dashboard is a page provided by Google that provides data on breakdown of the screen size/screen density matrix. Эта декомпозиция позволяет получить представление о том, как выполнять разработку на экранах с поддержкой.This breakdown provides insight on how to development effort on supporting screens.

  • Использование DP, а не пикселей в пикселях, становится проблематичным при изменении плотности экрана.Use DPs rather than Pixels - Pixels become troublesome as screen density changes. Не жестко кодировать значения пикселей.Do not hardcode pixel values. Старайтесь не использовать пикселов в качестве точки распространения (не зависящих от плотности).Avoid pixels in favor of dp (density-independent pixels).

  • Старайтесь не использовать Абсолутелайаут Везде, где это возможно – , мы не рекомендуем использовать на уровне API 3 (Android 1,5), и это приведет к нестабильнымм макетов. Avoid AbsoluteLayout Wherever Possible – it is deprecated in API level 3 (Android 1.5) and will result in brittle layouts. Его не следует использовать.It should not be used. Вместо этого попробуйте использовать более гибкие графические элементы макета, такие как элемент LinearLayout, RelativeLayoutили новое значение GridLayout.Instead, try to use more flexible layout widgets such as LinearLayout, RelativeLayout, or the new GridLayout.

  • Выбрать одну ориентацию макета по умолчанию Например, вместо использования альтернативных ресурсов Layout-Land и Layout-Port, разместите ресурсы для альбомной ориентации в макете, а ресурсы для книжной ориентации — на порт макета. –Pick one layout orientation as your default – For example, instead of providing the alternate resources layout-land and layout-port, put the resources for landscape in layout, and the resources for portrait into layout-port.

  • Использовать лайаутпарамс для высоты и ширины . при определении элементов пользовательского интерфейса в XML-файле макета приложение Android, использующее значения wrap_content и fill_parent , будет иметь более успешный вид на разных устройствах, чем использование независимых от пикселов единиц или плотности.Use LayoutParams for Height and Width - When defining UI elements in an XML layout file, an Android application using the wrap_content and fill_parent values will have more success ensure a proper look across different devices than using pixel or density-independent units. Эти значения измерений приводят к тому, что Android масштабирует ресурсы растрового изображения соответствующим образом.These dimension values cause Android to scale bitmap resources as appropriate. По той же причине единицы, не зависящие от плотности, лучше зарезервированы для при указании полей и дополнений элементов пользовательского интерфейса.For this same reason, density-independent units are best reserved for when specifying the margins and padding of UI elements.

Тестирование нескольких экрановTesting multiple screens

Приложение Android должно быть протестировано для всех конфигураций, которые будут поддерживаться.An Android application must be tested against all configurations that will be supported. Оптимальные устройства следует тестировать на самих устройствах, но во многих случаях это невозможно или практично.Ideally devices should be tested on the actual devices themselves but in many cases this is not possible or practical. В этом случае будет полезно использовать программу установки эмулятора и виртуальных устройств Android для каждой конфигурации устройства.In this case, the use of the emulator and Android Virtual Devices setup for each device configuration will be useful.

Пакет SDK для Android предоставляет некоторые обложки эмулятора, которые могут использоваться для создания AVD, которые будут реплицировать размер, плотность и разрешение множества устройств.The Android SDK provides some emulator skins may be used to create AVDs will replicate the size, density, and resolution of many devices. Многие поставщики оборудования также предоставляют обложки для своих устройств.Many of the hardware vendors likewise provide skins for their devices.

Другой вариант — использовать службы службы тестирования третьих сторон.Another option is to use the services of a third party testing service. Эти службы будут принимать APK, запускать их на различных устройствах, а затем оставлять отзывы о том, как работает приложение.These services will take an APK, run it on many different devices, and then provide feedback how the application worked.