次の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
たとえば、なぜThemeOverlay.AppCompat.lightとTheme.AppCompat.Lightを使用するのでしょうか? ThemeOverlayに定義されている属性ははるかに少ないことがわかります。ThemeOverlayの使用例が何であるか興味があります。
このあたり テーマとスタイルのブログ投稿 AppCompatの作成者:
[ThemeOverlays]は、通常のTheme.Materialテーマにオーバーレイする特別なテーマであり、関連する属性を上書きして明るい/暗いにする。
ThemeOverlay + ActionBar
あなたの鋭い目は、ActionBar ThemeOverlay派生物も見たことでしょう:
ThemeOverlay.Material.Light.ActionBar
ThemeOverlay.Material.Dark.ActionBar
これらは、新しい
actionBarTheme
属性を介してアクションバーで使用するか、ツールバーで直接設定する必要があります。現在これらが親と異なるのは、
colorControlNormal
をAndroid:textColorPrimary
に変更し、テキストとアイコンを不透明にすることだけです。
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>
私の原色は濃い青なので、黒のテキストは読みにくいため、アクションバーで明るいテキストの色を使用するテーマのいずれかを使用する必要があります。
Theme.MaterialではなくTheme.AppCompatを使用することの全体的な目的は、Androidの古いバージョンがマテリアルデザインテーマを使用できるようにすることです。問題は、Androidの古いバージョンがActionBarをサポートしていないことです。したがって、 documentation では、ActionBarを非表示にし、レイアウトにツールバーを追加することをお勧めします。 ActionBarを非表示にするには、NoActionBar
テーマのいずれかを使用する必要があります。次の画像は、アクションバーが非表示のツールバーを示しています。
しかし、DarkActionBarを備えたLightテーマのようなものが必要な場合はどうでしょうか。 NoActionBarを使用する必要があるため、これはオプションではありません。
ThemeOverlayの出番です。ツールバーのxmlレイアウトでDark ActionBarテーマを指定できます。
<Android.support.v7.widget.Toolbar
...
Android:background="?attr/colorPrimary"
Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
これにより、最終的に希望する効果が得られます。 Dark.ActionBarテーマoverlaysこの特定の機会のLightアプリテーマ。
Theme.AppCompat.Light.NoActionBar
ThemeOverlay.AppCompat.Dark.ActionBar
ポップアップメニューを明るくしたい場合は、これを追加できます。
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
これは、実験を通じて、また次の記事を読むことで学びました。