Стили и темы для значений, значений-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. -->