Когда следует использовать тему.AppCompat против ThemeOverlay.Совместимости приложений?


есть следующая тема.Классы AppCompat:

Theme.AppCompat
Theme.AppCompat.Light
Theme.AppCompat.Light.DarkActionBar
Theme.AppCompat.NoActionBar
Theme.AppCompat.Light.NoActionBar
Theme.AppCompat.DialogWhenLarge
Theme.AppCompat.Light.DialogWhenLarge
Theme.AppCompat.Dialog
Theme.AppCompat.Light.Dialog
Theme.AppCompat.CompactMenu

и следующий ThemeOverlay.Классы AppCompat:

ThemeOverlay.AppCompat
ThemeOverlay.AppCompat.Light
ThemeOverlay.AppCompat.Dark
ThemeOverlay.AppCompat.ActionBar
ThemeOverlay.AppCompat.Dark.ActionBar

зачем использовать ThemeOverlay.Совместимости приложений.свет против темы.Совместимости приложений.Например, свет? Я вижу, что есть гораздо меньше атрибутов, определенных для ThemeOverlay-мне любопытно, каков предполагаемый вариант использования для ThemeOverlay.

2 92

2 ответа:

в этой тема против стиля блога создателем AppCompat:

[ThemeOverlays] - это специальные темы, которые накладываются на обычную тему.Материал темы, перезапись соответствующих атрибутов, чтобы сделать их либо светлыми / темными.

ThemeOverlay + ActionBar

острый глаз вы также видели ActionBar ThemeOverlay производные:

  • ThemeOverlay.Material.Light.ActionBar
  • ThemeOverlay.Material.Dark.ActionBar

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

единственное, что они в настоящее время делают по-разному для своих родителей, это то, что они меняют colorControlNormal на android:textColorPrimary, что делает любой текст и значки непрозрачными.

тема.AppCompat используется для установки глобальной темы для всего приложения. Тематическая накладка.AppCompat используется для переопределения (или" наложения") этой темы для определенных представлений, особенно панели инструментов.

давайте рассмотрим пример, почему это необходимо.

темы приложения с панели быстрого доступа

панель действий обычно отображается в приложении. Я могу выбрать его цвет, установив colorPrimary значение. Однако изменение темы изменяет цвет текста на экране. Верхней панели.

<style name="AppTheme" parent="Theme.AppCompat">
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

enter image description here

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

скрытие панели действий и использование панели инструментов

весь смысл использования темы.AppCompat, а не тема.Материал таков, что мы можем позволить старым версиям Android использовать нашу тему material design. Проблема в том, что более старые версии Android не поддерживают панель действий. Таким образом,документация рекомендуется скрыть панель действий и добавить панель инструментов в макет. Чтобы скрыть панель действий, мы должны использовать один из NoActionBar темы. На следующих изображениях показана панель инструментов со скрытой панелью действий.

enter image description here

но что, если я хочу что-то вроде светлой темы с DarkActionBar? Поскольку я должен использовать NoActionBar, это не вариант.

переопределение темы приложения

вот где ThemeOverlay входит. Я могу указать тему Dark ActionBar в моем XML-макете панели инструментов.

<android.support.v7.widget.Toolbar
    ...
    android:background="?attr/colorPrimary"
    android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />

это, наконец, позволяет нам иметь эффект мы хотим. темнота.Темы верхней панели наложение тема Light app для этого конкретного случая.

enter image description here

  • Темы Приложения: Theme.AppCompat.Light.NoActionBar
  • Тему Панели Инструментов : ThemeOverlay.AppCompat.Dark.ActionBar

если вы хотите, чтобы всплывающее меню было легким, вы можете добавить следующее:

app:popupTheme="@style/ThemeOverlay.AppCompat.Light"

Дальнейшего Изучения

я узнал это через эксперименты и через чтение следующих статей.