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 perché è necessario.
temi app con un ActionBar
L'ActionBar è normalmente mostrati in un app. Posso scegliere il suo colore impostando il valore colorPrimary
. Tuttavia, cambiando il tema cambia il colore del testo su 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>
Dal momento che il mio colore primario è blu scuro, probabilmente dovrei usare uno dei temi che utilizza un colore testo chiaro nella barra delle operazioni perché il testo nero è difficile da leggere.
Nascondere l'ActionBar e l'utilizzo di una barra degli strumenti
Il punto di usare Theme.AppCompat piuttosto che Theme.Material è così che possiamo permettere che le vecchie versioni di Android di utilizzare il nostro tema progettuale materiale. Il problema è che le versioni precedenti di Android non supportano l'ActionBar. Pertanto, documentation consiglia di nascondere ActionBar e aggiungere una barra degli strumenti al layout. Per nascondere ActionBar dobbiamo usare uno dei temi NoActionBar
.Le seguenti immagini mostrano la barra degli strumenti con l'ActionBar nascosto.
Ma cosa succede se voglio qualcosa di simile a un tema leggero con un DarkActionBar? Dato che devo usare NoActionBar, questa non è un'opzione.
Override del tema App
Qui è dove entra in gioco ThemeOverlay. Posso specificare il tema scuro ActionBar nel mio layout Barra degli strumenti XML.
<android.support.v7.widget.Toolbar
...
android:background="?attr/colorPrimary"
android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" />
Questo finalmente ci consente di ottenere l'effetto desiderato. The Dark.ActionBar theme overlay il tema dell'app Light per questa particolare occasione.
- App Theme:
Theme.AppCompat.Light.NoActionBar
- Toolbar Tema:
ThemeOverlay.AppCompat.Dark.ActionBar
Se si voleva il menu a comparsa per essere luce si potrebbe aggiungere questo:
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
Ulteriori Studio
Ho imparato questo attraverso la sperimentazione e attraverso la lettura dei seguenti articoli.