Стили и темы для папок values, values-v11 и values-v14

В настоящее время я работаю над своим приложением, чтобы его дизайн основывался на теме Холо. В глобальном масштабе то, что я хочу сделать, это работать, но я немного озадачен тем, как работают папки values, values-v11 а также values-v14,

Итак, я знаю, что:

  • values ориентируется на API ниже 11
  • values-v11 ориентируется на API между 11 и 13
  • values-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. -->
Другие вопросы по тегам