Ответ 1
В настоящее время доступно до 3, иногда 4 Темы для Android-устройств (.Light
варианты и аналогичные не включены)
Theme
по умолчанию для самых ранних версий Android до 2.3 Gingerbread (10), включая некоторые незначительные изменения стиля в этих версиях
Theme.Holo
представлен с Android 3.0 Honeycomb (11)
Theme.Material
new в Android 5.0 Lollipop (21)
Theme.DeviceDefault
(Может быть что угодно)
представлен с 4.0 Ice Cream Sandwich (14), тема, которая может быть настроена производителем устройства. Он представляет собой внешний вид устройства - то есть устройства Holo или Material on Nexus (и в редакторе дизайна Android Studio), возможно, что-то пользовательское на других устройствах. В случае, если "что-то обычай" не является вариантом, эти устройства должны поставляться с темами акций. Приложения, которые хотят тему запаса, должны указать его.
Каков наилучший подход к этому?
Нет темы + targetSdkVersion >= 14
Самый простой, но не обязательно лучший вариант - вообще не определять тему. Затем Android выберет для вас значение по умолчанию. Но Android не хочет удивлять ваше приложение тем, которые вы не ожидаете, поэтому он возвращается к теме, для которой вы, вероятно, разработали приложение. Он делает это, смотря на android:targetSdkVersion
внутри AndroidManifest.xml
(который теперь может быть установлен через gradle).
- Приложения, ориентированные на старые платформы, которые имели только
Theme
(то есть уровни API 3-10), получат толькоTheme
. - Таргетинг приложений 11-13 получает
Theme.Holo
. - 14 или выше получите
Theme.DeviceDefault
.
Так как это просто для обратной совместимости, вы не получите Theme.Material
на своем старом телефоне Gingerbread. Поэтому никакая тема + цель 14+ = устройство по умолчанию.
Указание различных тем
Система наложения ресурсов Android позволяет указывать стили на уровне API-устройства. Например, разные версии стиля в res/values-v11
и res/values-v21
. Это также означает, что ваши новые приложения через Android Studio будут настроены для вас.
В качестве примера, самая базовая настройка для тематического приложения .Light
выглядит следующим образом:
/res/values/styles.xml
применяется к каждому устройству и служит базой
<resources>
<style name="AppTheme" parent="android:Theme.Light"/>
</resources>
/res/values-v11/styles.xml
загружается на все устройства с уровнем API 11 и выше (включая те, которые равны 21 и выше). Но на самом деле используется только самая новая версия "AppTheme".
<resources>
<style name="AppTheme" parent="android:Theme.Holo.Light"/>
</resources>
/res/values-v21/styles.xml
<resources>
<style name="AppTheme" parent="android:Theme.Material.Light"/>
</resources>
Примечание: альтернативно указать Theme.DeviceDefault
в /res/values-v14/styles.xml
должно быть достаточно для отображения по умолчанию, но это не позволяет точно настроить дизайн. Не помешает добавить переопределение v14. DeviceDefault и Holo могут быть разными в конце концов.
AndroidManifest.xml
- это место, где пользовательская тема используется. Например. как широкое применение по умолчанию:
...
<application
android:theme="@style/AppTheme"
...
Ссылки на официальную документацию
Выберите тему, основанную на версии платформы - Официальный документ для определения разных стилей с помощью конфигураций ресурсов
Holo Everywhere - сообщение в блоге, в котором объясняется механизм по умолчанию и тема DeviceDefault/Holo
Использование темы материала - документация по материалам