Theme.AppCompat digunakan untuk menyetel tema global untuk seluruh aplikasi. ThemeOverlay.AppCompat digunakan untuk mengganti (atau "menghamparkan") tema tersebut untuk tampilan tertentu, terutama Toolbar.
Mari kita lihat contoh mengapa hal ini perlu.
Tema aplikasi dengan ActionBar
ActionBar biasanya ditampilkan di aplikasi. Saya bisa memilih warnanya dengan mengatur colorPrimary
nilainya. Namun, mengubah tema mengubah warna teks di 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>
Karena warna utama saya adalah biru tua, saya mungkin harus menggunakan salah satu tema yang menggunakan warna teks terang di bilah tindakan karena teks hitam sulit dibaca.
Menyembunyikan ActionBar dan menggunakan Toolbar
Inti dari penggunaan Theme.AppCompat daripada Theme.Material adalah agar kami dapat mengizinkan versi Android yang lebih lama untuk menggunakan tema desain material kami. Masalahnya adalah versi Android yang lebih lama tidak mendukung ActionBar. Karenanya, dokumentasi merekomendasikan untuk menyembunyikan ActionBar dan menambahkan Toolbar ke layout Anda. Untuk menyembunyikan ActionBar kita harus menggunakan salah satu NoActionBar
tema. Gambar berikut menunjukkan Toolbar dengan ActionBar tersembunyi.
Tetapi bagaimana jika saya menginginkan sesuatu seperti tema Terang dengan DarkActionBar? Karena saya harus menggunakan NoActionBar, itu bukan pilihan.
Mengganti Tema Aplikasi
Di sinilah ThemeOverlay masuk. Saya bisa menentukan tema Dark ActionBar di layout xml Toolbar saya.
<android.support.v7.widget.Toolbar
...
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
Ini akhirnya memungkinkan kita untuk mendapatkan efek yang kita inginkan. Tema Dark.ActionBar menghamparkan tema aplikasi Terang untuk acara khusus ini.
- Tema Aplikasi:
Theme.AppCompat.Light.NoActionBar
- Tema Toolbar:
ThemeOverlay.AppCompat.Dark.ActionBar
Jika Anda ingin menu popup menjadi ringan, Anda dapat menambahkan ini:
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
Pelajaran lanjutan
Saya mempelajarinya melalui eksperimen dan membaca artikel-artikel berikut.