4. Ресурсы - kpb90/start_android GitHub Wiki

Android. Ресурсы

Ресурсы - это значение или файл.

Ресурсы можно модифицировать и предоставлять альтернативы без перекомпиляции исходного кода.

R.class - создает при помощи AAPT (Android Asset Packaging Tool) R.class нельзя менять в ручную.

К ресурсам можно обращаться через:

  1. XML @strings/hello_world
  2. JAVA R.strings.hello_world

Синтаксис

Java

[package] R.{type}.{name}

  • R.layout
  • R.id

XML

@[package:]{type}{name}

  • layout
  • id

Есть исключения.

java : R.array

XML : strings_array

ID

@+id/your_best_id - создает новый id @id/another_best_id - использует уже созданный.

Обзор структуры

res/ animator .xml assets/ ./.*

В res нельзя класть свои каталоги или подкаталоги, они будут проигнорированы

В assets - можно класть любые ресурсы, директории, но в java к ним нужно по другому обращаться.

Основные типы ресурсов

drawable / изображения layout / values / colors.xml dimens.xml strings.xml styles.xml assets / низкоуровневые ресурсы

R.drawable - изображения

R.layout - компоновки

R.string - строки

R.color - цвета

R.dimen - размерности

Стили

@[package:]style/{style_name}

@style/BigRedText

parent - от кого унаследованы стили

Assets

Любые ресурсы, любая вложенность директорий

Доступ в java через AssetManager

Нельзя обращаться через xml

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

a) /res/values/strings.xml

b) /res/values_ru/strings.xml

a) и b) -> один id->R.string.id

/res/drawable/[_qualifiers]/strings.xml

** Модификаторы ресурсов **

Ресурсы имеют приоритеты, чтобы Android мог выбрать нужный ему ресурс.

  1. Мобильный код и код оператора
  2. Язык и регион
  3. Layout direction
  4. Размеры экрана
  5. Тип экрана
  6. Ориентация экрана ...
  7. Уровень API

Алгоритм выбора ресурсов

  1. Android исключает те квалификаторы, которые противоречат конфигурации

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

Процесс 2) повторяется пока не останется папка с более высоким приоритетом.

Пример:

Дано: RU, портретный режим, hdpi

Ресурсы

/res/drawable/catpng -port -> | |

      -ru        -> |                         |

      -land_hdpi -> |   Убираем противоречия  | Выбирается квалификатор с max приоритетом

      -land_xdpi -> |                         |


                                ^
                                |
                   Исключения: квалификаторы screen density