Альтернативные ресурсы

Альтернативные ресурсы — это ресурсы, предназначенные для определенного устройства или конфигурации времени выполнения, например текущего языка, определенного размера экрана или плотности пикселей. Если Android может соответствовать ресурсу, который более конкретный для конкретного устройства или конфигурации, чем ресурс по умолчанию, вместо этого будет использоваться этот ресурс. Если он не находит альтернативный ресурс, соответствующий текущей конфигурации, будут загружены ресурсы по умолчанию. Как Android решает, какие ресурсы будут использоваться приложением, подробно описаны ниже в разделе "Расположение ресурсов"

Альтернативные ресурсы упорядочены как вложенный каталог в папке Resources в соответствии с типом ресурса, как и ресурсы по умолчанию. Имя альтернативного подкаталога ресурса находится в форме: квалификатор ResourceType-

Квалификатор — это имя, определяющее определенную конфигурацию устройства. В имени может быть несколько квалификатора, каждый из которых разделен дефисом. Например, на снимке экрана ниже показан простой проект с альтернативными ресурсами для различных конфигураций, таких как языковой стандарт, плотность экрана, размер экрана и ориентация:

Следующие правила применяются при добавлении квалификаторов в тип ресурса:

  1. Для каждого квалификатора, разделенного тире, может быть несколько квалификатора.

  2. Квалификаторы могут быть указаны только один раз.

  3. Квалификаторы должны находиться в том порядке, в который они отображаются в таблице ниже.

Возможные квалификаторы перечислены ниже для справки:

  • MCC и MNCкод мобильной страны (MCC) и при необходимости код мобильной сети (MNC). SIM-карта предоставит MCC, а сеть, к которому подключено устройство, предоставит MNC. Хотя языковые стандарты можно использовать с помощью кода мобильной страны, рекомендуется использовать квалификатор языка, указанный ниже. Например, для целевых ресурсов в Германии будет квалификатор mcc262. Для целевых ресурсов для T-Mobile в США используется mcc310-mnc026квалификатор. Полный список кодов мобильных стран и кодов мобильной сети см. в разделе http://mcc-mnc.com/.

  • Язык — двухбуквенный код языка ISO 639-1 и при необходимости двухбуквенный код региона ISO-3166-alpha-2. Если предоставляются оба квалификаторов, они разделены на .-r Например, для целевого языкового стандарта, выступающего на французском языке, используется квалификатор fr . Для того чтобы нацелиться на французских канадских языков, fr-rCA будет использоваться. Полный список языковых кодов и кодов регионов см. в разделе "Коды" для представления имен языков и стран и элементов кода.

  • Наименьшая ширина — указывает наименьшую ширину экрана, в котором приложение должно выполняться. Более подробно описано создание ресурсов для различных экранов. Доступно на уровне API 13 (Android 3.2) и выше. Например, квалификатор sw320dp используется для целевых устройств, высота и ширина которых составляет не менее 320dp.

  • Доступная ширина — минимальная ширина экрана в формате WNdp, где N — это ширина в плотности независимо от пикселей. Это значение может измениться, так как пользователь поворачивает устройство. Более подробно описано создание ресурсов для различных экранов. Доступно на уровне API 13 (Android 3.2) и выше. Пример: квалификатор w720dp используется для целевых устройств, имеющих ширину меньше 720dp.

  • Доступна высота — минимальная высота экрана в формате hNdp, где N — высота в dp. Это значение может измениться, так как пользователь поворачивает устройство. Более подробно описано создание ресурсов для различных экранов. Доступно на уровне API 13 (Android 3.2) и выше. Например, квалификатор h720dp используется для целевых устройств с высотой не менее 720dp.

  • Размер экрана — этот квалификатор представляет собой обобщение размера экрана, для которых предназначены эти ресурсы. Более подробно описано создание ресурсов для различных экранов. Допустимые значения: small, normal, large и xlarge. Добавлен на уровне API 9 (Android 2.3/Android 2.3.1/Android 2.3.2)

  • Аспект экрана — это зависит от пропорции, а не ориентации экрана. Длинный экран шире. Добавлено на уровне API 4 (Android 1.6). Возможные значения — длинные и недолго.

  • Ориентация экрана — книжная или альбомная ориентация экрана. Это может измениться во время существования приложения. Возможные значения: port и land.

  • Режим док-станции — для устройств на док-станции автомобиля или настольной док-станции. Добавлено на уровне API 8 (Android 2.2.x). Возможные значения: car и desk.

  • Ночной режим — работает ли приложение в ночное время или в день. Это может измениться в течение времени существования приложения и предназначено для того, чтобы разработчики могли использовать более темные версии интерфейса ночью. Добавлено на уровне API 8 (Android 2.2.x). Возможные значения: night и notnight.

  • Плотность пикселей экрана (dpi) — количество пикселей в заданной области на физическом экране. Обычно выражается как точки на дюйм (dpi). Возможны следующие значения:

    • ldpi — экраны с низкой плотностью.

    • mdpi — экраны средней плотности

    • hdpi — экраны с высокой плотностью

    • xhdpi — экраны с повышенной плотностью

    • nodpi — ресурсы, которые не должны масштабироваться

    • tvdpi — Представлено на уровне API 13 (Android 3.2) для экранов между mdpi и hdpi.

  • Тип сенсорного экрана— указывает тип сенсорного экрана, который может иметь устройство. Возможные значения: notouch (без сенсорного экрана), stylus (резистотивный сенсорный экран, подходящий для пера) и finger (сенсорный экран).

  • Доступность клавиатуры — указывает, какой тип клавиатуры доступен. Это может измениться в течение времени существования приложения, например, когда пользователь открывает аппаратную клавиатуру. Возможны следующие значения:

    • keysexposed — Устройство имеет доступную клавиатуру. Если программной клавиатуры нет, это используется только при открытии аппаратной клавиатуры.

    • keyshidden — Устройство имеет аппаратную клавиатуру, но она скрыта, и программная клавиатура не включена.

    • keyssoft — устройство с поддержкой программной клавиатуры.

  • Метод первичного ввода текста— используйте для указания типов аппаратных ключей, доступных для ввода. Возможны следующие значения:

    • nokeys — Ключи оборудования для входных данных отсутствуют.

    • qwerty — Доступна клавиатура qwerty.

    • 12key — Есть 12-клавишная аппаратная клавиатура

  • Доступность ключа навигации— если доступна навигация по 5-способу или d-pad (направление-панель). Это может измениться в течение всего времени существования приложения. Возможны следующие значения:

    • navexposed — ключи навигации доступны пользователю.

    • navhidden — ключи навигации недоступны.

  • Основной метод навигации без сенсорного ввода — вид навигации, доступный на устройстве. Возможны следующие значения:

    • nonav — единственным доступным средством навигации является сенсорный экран

    • dpad — d-pad (directional-pad) доступен для навигации

    • trackball — устройство имеет трекбол для навигации

    • wheel — необычный сценарий, где есть один или несколько направленных колес, доступных

  • Версия платформы (уровень API) — уровень API, поддерживаемый устройством в формате VN, где N — это целевой уровень API. Например, версия 11 предназначена для устройства УРОВНЯ API 11 (Android 3.0).

Дополнительные сведения о квалификаторах ресурсов см. на веб-сайте разработчиков Android.

Как Android определяет, какие ресурсы следует использовать

Это очень возможно и, вероятно, что приложение Android будет содержать много ресурсов. Важно понимать, как Android будет выбирать ресурсы для приложения при запуске на устройстве.

Android определяет базу ресурсов, выполнив итерацию по следующим тестам правил:

  • Исключите противоречивые квалификаторы , например, если ориентация устройства книжна, все каталоги ресурсов альбомной среды будут отклонены.

  • Игнорировать квалификаторы не поддерживаются . Не все квалификаторы доступны для всех уровней API. Если каталог ресурсов содержит квалификатор, который не поддерживается устройством, этот каталог ресурсов будет игнорироваться.

  • Определите следующий квалификатор с наивысшим приоритетом, ссылаясь на таблицу выше, выберите следующий квалификатор приоритета (от верхнего до нижнего).

  • Сохраните все каталоги ресурсов для квалификатора — если есть каталоги ресурсов, соответствующие квалификатору, таблице выше выберите следующий квалификатор с высоким приоритетом (от верхнего до нижнего).

Эти правила также показаны в следующей блок-схеме:

Resources flowchart

Когда система ищет ресурсы, относящиеся к плотности, и не может найти их, она попытается найти другие ресурсы плотности и масштабировать их. Android может не обязательно использовать ресурсы по умолчанию. Например, при поиске ресурса с низкой плотностью и недоступности Android может выбрать версию ресурса с высокой плотностью по умолчанию или ресурсов средней плотности. Это происходит из-за того, что ресурс высокой плотности может быть уменьшен на 0,5, что приведет к уменьшению видимости, чем сокращение ресурса средней плотности, которое потребует коэффициента 0,75.

В качестве примера рассмотрим приложение, включающее следующие каталоги ресурсов, доступные для рисования:

drawable
drawable-en
drawable-fr-rCA
drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi
drawable-port-ldpi
drawable-port-notouch-12key

Теперь приложение выполняется на устройстве со следующей конфигурацией:

  • Языковой стандарт — en-GB
  • Ориентация — порт
  • Плотность экрана — hdpi
  • Тип сенсорного экрана — notouch
  • Основной метод ввода — 12key

Начнем с того, что французские ресурсы устраняются, так как они конфликтуют с языковым en-GBстандартом, оставляя нас с:

drawable
drawable-en
drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi
drawable-port-ldpi
drawable-port-notouch-12key

Затем первый квалификатор выбирается из приведенной выше таблицы квалификаторов: MCC и MNC. Нет каталогов ресурсов, содержащих этот квалификатор, поэтому код MCC/MNC игнорируется.

Выбран следующий квалификатор, который является языком. Существуют ресурсы, соответствующие коду языка. Все каталоги ресурсов, которые не соответствуют языковому коду en , отклоняются, поэтому список ресурсов теперь:

drawable-en-port
drawable-en-notouch-12key
drawable-en-port-ldpi

Следующий квалификатор, который присутствует, предназначен для ориентации экрана, поэтому все каталоги ресурсов, которые не соответствуют ориентации port экрана, удаляются:

drawable-en-port
drawable-en-port-ldpi

Далее используется квалификатор для плотности экрана, ldpiчто приводит к исключению еще одного каталога ресурсов:

drawable-en-port-ldpi

В результате этого процесса Android будет использовать рисуемые ресурсы в каталоге drawable-en-port-ldpi ресурсов для устройства.

Примечание.

Квалификаторы размера экрана предоставляют одно исключение для этого процесса выбора. Для Android можно выбрать ресурсы, предназначенные для меньшего экрана, чем то, что предоставляет текущее устройство. Например, большое устройство с экрана может использовать ресурсы, предоставляемые для обычного размера экрана. Однако обратное значение не верно: одно и то же большое устройство экрана не будет использовать ресурсы, предоставленные для экрана xlarge. Если Android не удается найти набор ресурсов, соответствующий заданному размеру экрана, приложение завершится сбоем.