2014-12-01 19 views
85

ci sono le seguenti classi: Theme.AppCompatQuando si dovrebbe usare Theme.AppCompat vs ThemeOverlay.AppCompat?

Theme.AppCompat 
Theme.AppCompat.Light 
Theme.AppCompat.Light.DarkActionBar 
Theme.AppCompat.NoActionBar 
Theme.AppCompat.Light.NoActionBar 
Theme.AppCompat.DialogWhenLarge 
Theme.AppCompat.Light.DialogWhenLarge 
Theme.AppCompat.Dialog 
Theme.AppCompat.Light.Dialog 
Theme.AppCompat.CompactMenu 

e le seguenti classi: ThemeOverlay.AppCompat

ThemeOverlay.AppCompat 
ThemeOverlay.AppCompat.Light 
ThemeOverlay.AppCompat.Dark 
ThemeOverlay.AppCompat.ActionBar 
ThemeOverlay.AppCompat.Dark.ActionBar 

perché uno usare ThemeOverlay.AppCompat.light vs Theme.AppCompat.Light per esempio ? Vedo che ci sono molti meno attributi definiti per ThemeOverlay - Sono curioso di sapere qual è il caso d'uso previsto per ThemeOverlay.

risposta

54

Per questo Theme vs Style blog post dal creatore di AppCompat:

[ThemeOverlays] sono temi speciali che si sovrappongono le normali temi Theme.Material, sovrascrivendo attributi rilevanti per renderli sia chiaro/scuro.

ThemeOverlay + ActionBar

Eyed acuto si avrà anche visto i derivati ​​ActionBar ThemeOverlay:

  • ThemeOverlay.Material.Light.ActionBar
  • ThemeOverlay.Material.Dark.ActionBar

Questi dovrebbero essere utilizzati solo con la barra delle azioni tramite il nuovoAttributoo direttamente impostato sulla tua barra degli strumenti.

Le uniche cose che attualmente fanno in modo diverso ai loro genitori è che cambiano lo colorControlNormal in modo da essere android:textColorPrimary, rendendo opaco qualsiasi testo e icone.

89

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> 

enter image description here

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.

enter image description here

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.

enter image description here

  • 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.

Problemi correlati