Intereting Posts
Кинжал 2 на Android. Различные способы хранения и доступа к компоненту @Singleton Где код примера / tutorial для Viewpager, который отлично подходит для всех? Невозможно связать локальный 86XX для отладчика Org.json.JSONObject не может быть преобразован в JSONArray RuntimeException, вызванное безопасностьюException Когда рекомендуется запрашивать PendingIntent или LocationListener по запросуLocationUpdates? Исходный код Android-модуля Открытое приложение для получения уведомлений о пожарной базе (FCM) Как показать фактический режим дорожного движения на карте в Android Импортируйте SDK в facebook в проект cordova / phonegap Управление соединениями SQLite на Android Как извлечь изображения и текст в заказе из файла PDF с помощью iText на Android Какой правильный выбор? Создайте новые действия или просто создайте другой макет и замените существующий макет? Как получить обратную связь от RecyclerView? Android RatingBar неправильно рисует

Стили и темы для значений, значений-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-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-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, и сложно найти информацию о том, как она работает …

Спасибо за вашу помощь!

В общем, мой вопрос: эти 3 папки работают как родительские и дочерние?

Эти папки работают с «самой конкретной» системой сопоставления, означающей, что она будет соответствовать самой близкой (нижней) папке values уровня API:

  • 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. -->