4. Ресурсы - kpb90/start_android GitHub Wiki
Android. Ресурсы
Ресурсы - это значение или файл.
Ресурсы можно модифицировать и предоставлять альтернативы без перекомпиляции исходного кода.
R.class - создает при помощи AAPT (Android Asset Packaging Tool) R.class нельзя менять в ручную.
К ресурсам можно обращаться через:
- XML @strings/hello_world
- 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 мог выбрать нужный ему ресурс.
- Мобильный код и код оператора
- Язык и регион
- Layout direction
- Размеры экрана
- Тип экрана
- Ориентация экрана ...
- Уровень API
Алгоритм выбора ресурсов
-
Android исключает те квалификаторы, которые противоречат конфигурации
-
Android по таблице приоритетов, начиная с самого высокого проверяет есть ли ресурсы, которые используют данный квалификатор.
Процесс 2) повторяется пока не останется папка с более высоким приоритетом.
Пример:
Дано: RU, портретный режим, hdpi
Ресурсы
/res/drawable/catpng -port -> | |
-ru -> | |
-land_hdpi -> | Убираем противоречия | Выбирается квалификатор с max приоритетом
-land_xdpi -> | |
^
|
Исключения: квалификаторы screen density