7

So che ci sono un paio di domande sullo stile della barra delle azioni contestuali (ActionMode) nella barra delle azioni, ma non sembrano affrontare quello che sto cercando.Come specificare la modalità di azione scura con il mio tema

Uso la barra degli strumenti con un tema di luce e una barra di azione scura. La barra degli strumenti sembra che io voglia, ma la modalità di azione sembra il tema scuro normale. Cosa devo cambiare nel mio stile per ottenere la modalità di azione a tema scuro (non solo la barra di azione)? Sembra che dovrei essere in grado di farlo rapidamente toccando Theme.AppCompat poiché mostra CAB come lo desidero, ma non voglio che il resto dell'applicazione sia scuro.

Mi preoccupo solo dell'API 14+ e sto utilizzando la barra degli strumenti di supporto al posto della barra delle azioni.

Qui è il mio stile di base

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="android:actionModeBackground">@color/colorActionMode</item> 
    <item name="android:windowActionModeOverlay">true</item> 
</style> 

stile Toolbar

<style name="AppTheme.Toolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> 
    <item name="android:textColorPrimary">@color/abc_primary_text_material_dark</item> 
    <item name="actionMenuTextColor">@color/abc_primary_text_material_dark</item> 
    <item name="android:textColorSecondary">@color/abc_primary_text_material_dark</item> 
    <item name="android:background">@color/colorPrimaryDark</item> 
</style> 

file di layout Barra degli strumenti (impostazione popupTheme qui non sembra avere alcun effetto).

<android.support.v7.widget.Toolbar 
    android:id="@+id/toolbar" 
    android:layout_width="match_parent" 
    android:layout_height="?android:attr/actionBarSize" 
    app:theme="@style/AppTheme.Toolbar" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Dark" 
    android:popupTheme="@style/ThemeOverlay.AppCompat.Dark" 
    android:elevation="2dp" 
    android:focusable="false"/> 

Ecco la mia barra degli strumenti (che è come lo voglio)

styled toolbar

Ecco la mia ActionMode (che ho bisogno di invertire)

my action mode

Ecco quello che voglio l'ActionMode per apparire (che ho ottenuto cambiando il mio stile per ereditare da Theme.AppCompat anziché da Theme.AppCompat.Light.DarkActionBar. Il problema è che il resto dell'applicazione si oscura, cosa che non voglio.

dark action mode

risposta

2

Dai un'occhiata a questo post sul blog che spiega come lo stile della barra degli strumenti per essere scuro:

http://android-developers.blogspot.ie/2014/10/appcompat-v21-material-design-for-pre.html

<android.support.v7.widget.Toolbar 
    android:layout_height=”wrap_content” 
    android:layout_width=”match_parent” 
    android:minHeight=”@dimen/triple_height_toolbar” 
    app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" 
    app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> 

di specificare uno "stile" barra degli strumenti. Quello che penso ti manchi è la proprietà "tema" con lo spazio dei nomi dell'app che applica lo stile alla barra degli strumenti e a tutti i suoi figli.

Edit: Questo dovrebbe funzionare per il vostro caso specifico

<style name="AppTheme.Base" parent="Theme.AppCompat.Light.NoActionBar"> 
    <item name="colorPrimary">@color/colorPrimary</item> 
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item> 
    <item name="android:actionModeBackground">@color/colorActionMode</item> 
    <item name="android:windowActionModeOverlay">true</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="windowActionBar">false</item> 
</style> 
<style name="AppTheme.Toolbar" parent="ThemeOverlay.AppCompat.Dark.ActionBar"> 
    <item name="android:textColorPrimary">@color/abc_primary_text_material_dark</item> 
    <item name="actionMenuTextColor">@color/abc_primary_text_material_dark</item> 
    <item name="android:textColorSecondary">@color/abc_primary_text_material_dark</item> 
    <item name="android:background">@color/colorPrimaryDark</item> 
</style> 
+0

Ho già applicato la barra degli strumenti a tema e aggiungerò la mia dichiarazione sulla barra degli strumenti alla domanda. Impostazione del popupTheme non sembra avere alcun effetto. Ho provato app.popupTheme e Android: popupTheme. – Spencer

+0

Ho la stessa impostazione e il tema della mia app eredita da 'Theme.AppCompat.Light.NoActionBar' e il tema della barra degli strumenti eredita da' ThemeOverlay.AppCompat.Dark.ActionBar' come specificato nella mia risposta. – darnmason

+0

Sfortunatamente, quegli stili sono essenzialmente gli stessi di quello che ho già. 'Theme.AppCompat.Light.NoActionBar' aggiunge solo cose che ho già avuto nello stile e il tema' Dark.ActionBar' per Toolbar non cambia nulla. Quando ho provato quello che hai lì ottengo lo stesso risultato che avevo originariamente. – Spencer

4

Inizia con l'attributo primario actionModeStyle nel tema di base:

<item name="actionModeStyle">@style/LStyled.ActionMode</item> 

Definire LStyled.ActionMode come:

<style name="LStyled.ActionMode" parent="@style/Widget.AppCompat.ActionMode"> 
    <item name="titleTextStyle">@style/LStyled.ActionMode.Title</item> 
    <item name="subtitleTextStyle">@style/LStyled.ActionMode.Subtitle</item> 
</style> 

Infine:

<style name="LStyled.ActionMode.Title" parent="@style/TextAppearance.AppCompat.Widget.ActionMode.Title"> 
    <item name="android:textColor">@color/color_action_mode_text</item> 
</style> 

<style name="LStyled.ActionMode.Subtitle" parent="@style/TextAppearance.AppCompat.Widget.ActionMode.Subtitle"> 
    <item name="android:textColor">@color/color_action_mode_text</item> 
</style> 

Questo sovrascriverà il colore del tema specificato per il titolo & sottotitoli (se necessario).

Quello che rimane è il pulsante di overflow. Accendi qualsiasi software di modifica delle immagini che supporti la sostituzione del colore. Utilizzare il menu di overflow dalla cartella res/drawable-XXXX di AppCompat. Dipingilo di bianco. Avanti, ignorare actionOverflowButtonStyle nel tema di base e specificare il png che avete appena modificato:

<item name="actionOverflowButtonStyle">@style/LStyled.OverFlow</item> 

<style name="LStyled.OverFlow" parent="@style/Widget.AppCompat.ActionButton.Overflow"> 
    <item name="android:src">@drawable/modified_overflow_icon</item> 
</style> 

Non c'è molto di una spiegazione/tutorial che posso fornire per quanto riguarda la personalizzazione di temi. L'unico modo per capirlo è passare attraverso i file [styles] [themes] .xml dal framework. Anche la lettura del codice sorgente ti aiuta: scoprirai quali attributi vengono utilizzati e dove/se possono essere personalizzati.

Punto di menzione:

voglio essere in grado di estendere uno stile per ottenere lo stesso comportamento che è integrato nel tema scuro.

Sì, ma questo potrebbe non essere desiderato. La parte sopra che riguarda la modifica dell'icona del menu di overflow può essere sostituita con un attributo colorControlNormal sostituito. TintManager (Link) utilizza il valore del colore da colorControlNormal per colorare il menu di sfioro, disegnabile (tra gli altri drawable). Dai un'occhiata al contenuto dell'array TINT_COLOR_CONTROL_NORMAL nel codice sorgente. Ma ignorare lo colorControlNormal per risolvere un drawable può cambiare l'aspetto generale dell'aspetto dell'applicazione &.

+0

Grazie per la risposta, ma sto cercando un modo per estendere lo stile integrato. So che posso sostituire l'icona di overflow (e l'icona home as) nella modalità di azione, ma speravo di evitare di farlo e di usare solo lo stile integrato. – Spencer

+0

@Spencer So solo di questa 'soluzione alternativa'.Aggiornerò la mia risposta (e lascerò un commento) se trovo qualcosa di elegante. Ma, ho fatto ricerche prima di postare la risposta. Sembra che quello che stai cercando non sia supportato dal sistema (ancora?). – Vikram

+1

La risposta che hai dato qui è fondamentalmente ciò che ho fatto prima di porre la domanda qui (ho anche dovuto modificare l'icona "home as up". Speravo di poter ottenere il sistema per fare tutto questo così come aggiungere il supporto RTL e così via, ma non ho capito come sia. Grazie per i tuoi pensieri però. – Spencer

1

Voglio solo aggiungere alla risposta di Vikram, specifica per colorare il pulsante di overflow e altri controlli predefiniti nella modalità di azione.

L'elemento 'colorControlNormal' che definisce la colorazione di questi pulsanti nella modalità di azione deve essere inserito nel tema della barra delle azioni, non nello stile della modalità di azione. Solo allora verrà utilizzato per i pulsanti overflow, done, close e back nella modalità di azione.

0

tenta di utilizzare

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar"> 
    <item name="windowActionBar">false</item> 
    <item name="windowNoTitle">true</item> 
</style> 

invece.