Theme.AppCompat, uygulamanın tamamı için genel temayı ayarlamak için kullanılır. ThemeOverlay.AppCompat, belirli görünümler, özellikle Araç Çubuğu için bu temayı geçersiz kılmak (veya "kaplamak") için kullanılır.
Bunun neden gerekli olduğuna dair bir örneğe bakalım.
ActionBar ile uygulama temaları
ActionBar normalde bir uygulamada gösterilir. colorPrimary
Değeri ayarlayarak rengini seçebilirim . Ancak temayı değiştirmek, ActionBar'daki metnin rengini değiştirir.
<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>
Ana rengim koyu mavi olduğundan, siyah metnin okunması zor olduğu için muhtemelen eylem çubuğunda açık bir metin rengi kullanan temalardan birini kullanmalıyım.
ActionBar'ı gizleme ve bir Araç Çubuğu kullanma
Theme.Material yerine Theme.AppCompat kullanmanın tüm amacı, Android'in eski sürümlerinin materyal tasarım temamızı kullanmasına izin verebilmemizdir. Sorun, Android'in eski sürümlerinin ActionBar'ı desteklememesidir. Bu nedenle, dokümantasyon , ActionBar'ı gizlemenizi ve düzeninize bir Araç Çubuğu eklemenizi önerir. ActionBar'ı gizlemek için NoActionBar
temalardan birini kullanmalıyız . Aşağıdaki resimler, ActionBar gizlenmiş olarak Araç Çubuğunu gösterir.
Peki ya DarkActionBar ile Light teması gibi bir şey istersem? NoActionBar kullanmak zorunda olduğum için bu bir seçenek değil.
Uygulama Temasını Geçersiz Kılma
ThemeOverlay burada devreye giriyor. Araç Çubuğu xml düzenimde Dark ActionBar temasını belirtebilirim.
<android.support.v7.widget.Toolbar
...
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
Bu nihayet istediğimiz etkiye sahip olmamızı sağlıyor. Dark.ActionBar teması , bu özel durum için Light uygulama temasının üzerini kaplar .
- Uygulama Teması:
Theme.AppCompat.Light.NoActionBar
- Araç Çubuğu Teması:
ThemeOverlay.AppCompat.Dark.ActionBar
Açılır menünün hafif olmasını istiyorsanız, şunu ekleyebilirsiniz:
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
İlerideki çalışma
Bunu deney yaparak ve aşağıdaki makaleleri okuyarak öğrendim.