Theme.AppCompat viene utilizzato per impostare il tema globale per l'intera app. ThemeOverlay.AppCompat viene utilizzato per sovrascrivere (o "sovrapporre") quel tema per visualizzazioni specifiche, in particolare la barra degli strumenti.
Diamo un'occhiata a un esempio del motivo per cui è necessario.
Temi delle app con una ActionBar
La ActionBar viene normalmente mostrata in un'app. Posso scegliere il suo colore impostando il colorPrimary
valore. Tuttavia, la modifica del tema cambia il colore del testo sulla 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>
Poiché il mio colore principale è il blu scuro, probabilmente dovrei usare uno dei temi che utilizza un colore del testo chiaro nella barra delle azioni perché il testo nero è difficile da leggere.
Nascondere la ActionBar e utilizzare una barra degli strumenti
Il punto centrale dell'utilizzo di Theme.AppCompat piuttosto che Theme.Material è che possiamo consentire alle versioni precedenti di Android di utilizzare il nostro tema di material design. Il problema è che le versioni precedenti di Android non supportano ActionBar. Pertanto, la documentazione consiglia di nascondere la ActionBar e di aggiungere una barra degli strumenti al layout. Per nascondere la ActionBar dobbiamo usare uno dei NoActionBar
temi. Le immagini seguenti mostrano la barra degli strumenti con la ActionBar nascosta.
Ma cosa succede se voglio qualcosa come un tema Light con DarkActionBar? Dato che devo usare NoActionBar, questa non è un'opzione.
Sostituzione del tema dell'app
È qui che entra in gioco ThemeOverlay. Posso specificare il tema Dark ActionBar nel mio layout xml della barra degli strumenti.
<android.support.v7.widget.Toolbar
...
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
Questo ci permette finalmente di avere l'effetto che vogliamo. Il tema Dark.ActionBar si sovrappone al tema dell'app Light per questa particolare occasione.
- Tema dell'app:
Theme.AppCompat.Light.NoActionBar
- Tema della barra degli strumenti:
ThemeOverlay.AppCompat.Dark.ActionBar
Se desideri che il menu popup sia leggero, puoi aggiungere questo:
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
Ulteriori studi
L'ho imparato attraverso la sperimentazione e leggendo i seguenti articoli.