Стили и темы для папок values, values-v11 и values-v14
В настоящее время я работаю над своим приложением, чтобы его дизайн основывался на теме Холо. В глобальном масштабе то, что я хочу сделать, это работать, но я немного озадачен тем, как работают папки values
, values-v11
а также values-v14
,
Итак, я знаю, что:
values
ориентируется на API ниже 11values-v11
ориентируется на API между 11 и 13values-v14
нацелен на API, превосходящий 13
Сначала я думал, что должен указать для каждой папки все стили, необходимые для приложения, но потом понял, что существует какая-то система наследования.
Моя проблема в том, что я действительно запутался и не понимаю, как работает это наследование между этими 3 папками.
Я сделал следующий тест, чтобы увидеть поведение на моем телефоне (работает на Android 4.0, поэтому папка values-v14
должен быть загружен):
В values
У меня есть стиль, чтобы установить синий цвет текста:
<style name="TextMedium" parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">@color/Blue</item>
В values-v11
У меня есть стиль, чтобы установить белый цвет текста:
<style name="TextMedium" parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">@color/White</item>
В values-v14
У меня есть стиль, чтобы установить красный цвет текста:
<style name="TextMedium" parent="@android:style/TextAppearance.Medium">
<item name="android:textColor">@color/Red</item>
Для первого случая выше (каждая папка с другим цветом), цвет, загруженный в мой текст, является красным, означая values-v14
папка получает приоритет.
Тогда, если я закомментирую красный стиль из values-v14
папка, текст становится белым. Означает ли это, что система примет стиль в values-v11
папку, даже если устройство нацелено на values-v14
папка? Я думал, что, возможно, будет использовать values
папка по умолчанию, но не values-v11
,
В общем, мой вопрос, эти 3 папки работают как родительские и дочерние? Означающий, что:
- Если устройство работает с версией API> 13, система загрузится
values-v14
затемvalues-v11
и наконецvalues
, - Если устройство работает по API между 11 и 13, система загрузится
values-v11
а потомvalues
, - Если устройство работает с версией API < 11, система будет загружаться только
values
,
Если это действительно так, работает, имеет ли смысл установить максимальное количество стилей в родительской папке? values
и добавить только конкретные в v11 или v14?
Извините за длинный вопрос, надеюсь, это понятно, эта система тем / стилей кратко описана в руководстве по Android, и трудно найти информацию о том, как она работает...
Спасибо за вашу помощь!
1 ответ
В общем, мой вопрос, эти 3 папки работают как родительские и дочерние?
Эти папки работают с "наиболее специфичной" системой сопоставления, что означает, что она будет соответствовать ближайшему (более низкому) уровню API values
папка:
values-v14
целевые API> =14
(он не будет выбран вообще для версий ниже14
)values-v11
целевые API между (и в том числе)11
а также13
еслиvalues-v14
присутствует, иначе будет соответствовать каждой версии, начиная с11
и выше ((он не будет выбран вообще для версий ниже11
))values
является папкой по умолчанию, и она будет последней из сопоставляемых, охватывая другие уровни API, не охватываемые другойvalues-xx
папка. Вы должны всегда (как со всеми папками ресурсов) иметь эту папку в своем приложении
Если это действительно так, работает ли это, имеет ли смысл устанавливать максимум стилей в значениях родительской папки и добавлять только определенные в v11 или v14?
Да, именно так создается шаблон проекта Android (при использовании Create new project...
), на самом деле он говорит вам использовать values-xx
папки для настройки (другой вид, использование новых стилей, атрибуты):
<!-- in the styles.xml from the v-14 values folder: -->
<!-- API 14 theme customizations can go here. -->