В этом уроке
Вы также должны прочитать
Android классифицирует экраны устройств, используя два общих свойства: размер и плотность. Вы должны ожидать, что ваше приложение будет установлено на устройствах с экранами, которые варьируются по размеру и плотности. Таким образом, вы должны содержать альтернативные ресурсы, которые оптимизируют внешний вид вашего приложения для различных размеров экранов и плотности.
- Есть четыре обобщенные размеры: маленький (small), нормальный (normal), большой (large), очень большой (xlarge)
- И четыре обобщенные плотности: низкая (ldpi), средняя (mdpi), высокач (hdpi), сверхвысокая (xhdpi)
Чтобы объявить различные макеты и растровые изображения, которые нужно использовать для различных экранов, необходимо поместить эти альтернативные ресурсы в отдельные каталоги, подобно тому, как вы делаете для различных строк под разные языки.
Также помните, что ориентация экранов (альбомная или книжная) считается изменение размера экрана, поэтому многие приложения должны пересмотреть компоновку для оптимизации работы пользователей в каждой ориентации.
[wpanchor id=»1″]
Создание различных макетов
Для оптимизации работы пользователей на различных размерах экрана, вы должны создать уникальный XML-файл макета для каждого размера экрана, который вы хотите поддерживать. Каждый макет должен быть сохранен в каталоге соответствующих ресурсов, названный с -<screen_size>
суффиксом. Например, уникальный макет для больших экранах должен быть сохранен в res/layout-large/
.
Примечание: Android автоматически масштабирует ваш макет, чтобы правильно заполнить экран. Таким образом, вашим макетам для различных размеров экрана не нужно беспокоиться об абсолютных размерах элементов пользовательского интерфейса, а вместо этого сосредоточьтесь на структуре макета, который влияет на пользовательский опыт (например, подумайте о размере или положении важных представлений по отношению друг к другу).
Например, этот проект включает в себя макет по умолчанию и альтернативный макет под большойэкран:
MyProject/ res/ layout/ main.xml layout-large/ main.xml
Имена файлов должны быть точно такие же, но их содержание отличается в целях обеспечения оптимизированного интерфейса для соответствующего размера экрана.
Просто ссылайтесь на файл макета в вашем приложении как обычно:
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); }
Система загружает файл макета из соответствующего каталога макета в зависимости от размера экрана устройства, на котором ваше приложение работает. Более подробную информацию о том, как в Android выбирает соответствующий ресурс, читайте Предоставление ресурсов.
В качестве другого примера, вот проект с альтернативным макетом при альбомной ориентации:
MyProject/ res/ layout/ main.xml layout-land/ main.xml
По умолчанию layout/main.xml
файл используется для книжной ориентации.
Если вы хотите, чтобы обеспечить специальный макет для альбомной ориентации, в том числе и для больших экранов, то вам нужно использовать оба large
и land
спецификатор:
MyProject/ res/ layout/ # default (portrait) main.xml layout-land/ # landscape main.xml layout-large/ # large (portrait) main.xml layout-large-land/ # large landscape main.xml
Примечание: Android 3.2 и выше, поддерживает усовершенствованный метод определения размеров экрана, что позволяет указать ресурсы для размеров экрана на основе минимальной ширины и высоты в независимых от плотности пикселях. Этот урок не содержит описания этого нового способа. Для получения дополнительной информации, читайте Проектирование для нескольких экранов.
[wpanchor id=»2″]
Создание различных растровых изображений
Вы всегда должны предоставлять растровые ресурсы, которые корректно масштабируются для каждой из обобщенных плотностей: низкой, средней, высокой и сверхвысокой плотности. Это поможет вам достичь хорошего графического качества и производительности на всех плотностях экрана.
Для создания этих изображений, вы должны начать с ресурса в векторном формате и генерировать изображения для каждой плотности, используя следующую шкалу размеров:
- xhdpi: 2.0
- hdpi: 1.5
- mdpi: 1.0 (базовый)
- ldpi: 0.75
Это означает, что если вы создаете изображение 200×200 для xhdpi устройства, необходимо генерировать тот же ресурс в 150×150 для hdpi, 100×100 для mdpi и 75×75 для ldpi устройств.
Затем поместите файлы в соответствующий каталог рисуемых ресурсов:
MyProject/ res/ drawable-xhdpi/ awesomeimage.png drawable-hdpi/ awesomeimage.png drawable-mdpi/ awesomeimage.png drawable-ldpi/ awesomeimage.png
Каждый раз, когда вы ссылаетесь @drawable/awesomeimage
, система выбирает соответствующее растровое изображение на основе плотности экрана.
Примечание: Ресурсы низкой плотности (ldpi) не всегда необходимы. Когда вы предоставляете hdpi наборы, система масштабирует их на половину, чтоюы соответствовать должным образом экранам ldpi.
Для получения большего количества советов и рекомендаций по созданию набора значков для вашего приложения, см. Иконография — руководство по дизайну.