Theme.AppCompatは、アプリ全体のグローバルテーマを設定するために使用されます。ThemeOverlay.AppCompatは、特定のビュー、特にツールバーのテーマをオーバーライド(または「オーバーレイ」)するために使用されます。
これが必要な理由の例を見てみましょう。
ActionBarを使用したアプリのテーマ
通常、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つを使用する必要があります。
ActionBarを非表示にしてツールバーを使用する
Theme.MaterialではなくTheme.AppCompatを使用することの要点は、古いバージョンのAndroidがマテリアルデザインテーマを使用できるようにすることです。問題は、古いバージョンのAndroidがActionBarをサポートしていないことです。したがって、ドキュメントでは、ActionBarを非表示にし、レイアウトにツールバーを追加することを推奨しています。ActionBarを非表示にするには、いずれかのNoActionBar
テーマを使用する必要があります。次の画像は、ActionBarが非表示になっているツールバーを示しています。
しかし、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テーマは、この特定の機会のためのLightアプリテーマをオーバーレイします。
- アプリのテーマ:
Theme.AppCompat.Light.NoActionBar
- ツールバーのテーマ:
ThemeOverlay.AppCompat.Dark.ActionBar
ポップアップメニューを軽くしたい場合は、次のように追加できます。
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
さらなる研究
私はこれを実験と次の記事を読んで学びました。