Подтвердить что ты не робот

Как использовать тему по умолчанию для приложения?

У меня есть приложение, которое я хочу разработать для Android 2.1, 2.2, 2.3.3, 3.0/3.1 и 4.0.x. Между этими уровнями API существует около 3 различных типов тем. Последней темой 4.0.x является Holo.

В любом случае, я хочу, чтобы мое приложение использовало тему Android по умолчанию для любого устройства. Если он на устройстве 4.0.x, я хочу, чтобы он использовал Холо. Если на 2.3.3 я хочу использовать эту тему из этой версии Android. и т.д...

Есть ли простой способ приблизиться к этому? Я заметил, что с 4.0 они добавили тему Theme.DeviceDefault, которую вы можете использовать, но это не помогает мне для более старых уровней API. Каков наилучший подход к этому?

4b9b3361

Ответ 1

В настоящее время доступно до 3, иногда 4 Темы для Android-устройств (.Light варианты и аналогичные не включены)

Theme

Theme

по умолчанию для самых ранних версий Android до 2.3 Gingerbread (10), включая некоторые незначительные изменения стиля в этих версиях


Theme.Holo

Theme.Holo

представлен с Android 3.0 Honeycomb (11)


Theme.Material

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

Использование темы материала - документация по материалам

Ответ 2

Вы можете объявить тему в своих значениях /styles.xml, а затем в ваших значениях-v11/styles.xml переопределить ее с помощью Holo-версии:

значения/styles.xml:

 <style name="DialogTheme" parent="@android:style/Theme.Dialog"></style>

значения-V11/styles.xml:

 <style name="DialogTheme" parent="@android:style/Theme.Holo.Light.Dialog.NoActionBar"></style>

Сделайте это так, и у вас будут темы Holo на устройствах API 11+ и обычные темы на других.

Отношения Стеффен Вангсгард