Theme.AppCompat と ThemeOverlay.AppCompat はいつ使用すればよいですか? 質問する

Theme.AppCompat と ThemeOverlay.AppCompat はいつ使用すればよいですか? 質問する

次の Theme.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

たとえば、Theme.AppCompat.Light ではなく ThemeOverlay.AppCompat.light を使用するのはなぜでしょうか? ThemeOverlay に定義されている属性がはるかに少ないことがわかります。ThemeOverlay の想定される使用例が何なのか興味があります。

ベストアンサー1

Theme.AppCompat は、アプリ全体のグローバル テーマを設定するために使用されます。ThemeOverlay.AppCompat は、特定のビュー、特にツールバーのテーマをオーバーライド (または「オーバーレイ」) するために使用されます。

なぜこれが必要なのか、例を挙げて見てみましょう。

アクションバー付きのアプリテーマ

ActionBar は通常、アプリ内に表示されます。colorPrimary値を設定することで色を選択できます。ただし、テーマを変更すると、ActionBar 上のテキストの色が変わります。

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

ここに画像の説明を入力してください

私のメインカラーは濃い青なので、黒いテキストは読みにくいので、アクションバーで明るいテキスト色を使用するテーマの 1 つを使用する必要があるでしょう。

アクションバーを非表示にしてツールバーを使用する

Theme.MaterialではなくTheme.AppCompatを使用する主な目的は、Androidの古いバージョンでマテリアルデザインのテーマを使用できるようにすることです。問題は、Androidの古いバージョンがActionBarをサポートしていないことです。したがって、ドキュメンテーションActionBar を非表示にして、レイアウトに Toolbar を追加することをお勧めします。ActionBar を非表示にするには、NoActionBarテーマの 1 つを使用する必要があります。次の画像は、ActionBar が非表示になっている Toolbar を示しています。

ここに画像の説明を入力してください

しかし、DarkActionBar を備えた Light テーマのようなものが必要な場合はどうすればよいでしょうか? NoActionBar を使用する必要があるため、これは選択肢ではありません。

アプリのテーマを上書きする

ここで ThemeOverlay が登場します。Toolbar xml レイアウトで Dark ActionBar テーマを指定できます。

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

これでようやく望み通りの効果が得られます。Dark.ActionBarテーマオーバーレイこの特別な機会のためのライト アプリ テーマ。

ここに画像の説明を入力してください

  • アプリテーマ:Theme.AppCompat.Light.NoActionBar
  • ツールバーのテーマ:ThemeOverlay.AppCompat.Dark.ActionBar

ポップアップ メニューを明るくしたい場合は、以下を追加します。

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

さらなる研究

私は実験と以下の記事を読むことでこれを学びました。

おすすめ記事