Создание ресурсов для разных экранов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. Эта формула используется для преобразования точки распространения в пикселях на экране:This formula is used to convert dp into screen pixels:

    px = dp × dpi ÷ 160px = 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 density независимых пикселях (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.

Использование density независимых пикселей вместо собственно пикселы в макетах достаточно в большинстве случаев, чтобы обеспечить независимость от плотности.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. Это достигается путем установки поддерживает экраны элемент в 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.

Поддерживаемые экрана sixes объявляются в Properites/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), размеры экрана устарели и были заменены с помощью swNквалификатор точки распространения.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 dp ширины экрана, альтернативный макет будет обрабатываться в папку 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"/ «tweener» устройства – 480 dp: например Примечание SamsungA 5" tablet / "tweener" device – 480 dp: such as the Samsung Note

  • Планшет 7" – 600 dp: например Barnes & Noble NookA 7" tablet – 600 dp: such as the Barnes & Noble Nook

  • Планшет 10" – 720 dp: например Motorola XoomA 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:

Ниже приведен сравнение сравнение старых квалификаторы размер экрана pre-API уровня 13 с density независимых пикселях.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 точка распространения не небольшой426 dp x 320 dp is small

  • 470 dp x 320 точка распространения не обычный470 dp x 320 dp is normal

  • 640 dp x 480 точка распространения не больших640 dp x 480 dp is large

  • 960 dp x 720 точка распространения не очень большой.960 dp x 720 dp is xlarge

Более новые экрана размер квалификаторы в API уровня 13 и копирования имеют более высокий приоритет, чем старые квалификаторы экрана 12 и нижнего уровней API.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 создала служебной online, которые могут снизить часть утомительной работы, связанные с созданием эти точечные рисунки вызывается 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.

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

  • Избегайте AbsoluteLayout везде, где возможно – его рекомендуется использовать в 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.

  • Выберите один ориентацию макета по умолчанию – вместо предоставляя альтернативные ресурсы, например, макета land и макета port, поместите ресурсы для в в альбомной ориентации макетаи ресурсы для книжной в макета 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.

  • Использовать LayoutParams высоты и ширины — при определении элементов пользовательского интерфейса в XML-файл макета, приложения Android с помощью wrap_content и fill_parent значения будут иметь успешное развитие обеспечить правильное взгляд на различных устройствах, чем при использовании пикселей или density независимых единицах.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. По этой же причине density независимых единицах, лучше всего зарезервированы для при указании поля и заполнение элементов пользовательского интерфейса.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.