Стили и темы для значений, значений-v11 и значений-v14 папок

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

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

  • values нацелен на API ниже 11
  • values-v11 нацелен на API между 11 и 13
  • values-v14 нацелен на API выше 13

Сначала мне показалось, что мне нужно указать для каждой папки все стили, необходимые для приложения, но затем я понял, что на самом деле существует система наследования.

Моя проблема в том, что я действительно запутался и не понимаю, как работает это наследование между этими тремя папками.

Я сделал следующий тест, чтобы увидеть поведение на моем телефоне (работает на 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 target APIs >= 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. -->