Opzione 1) Il modo semplice e veloce (solo Toolbar)
Da appcompat-v7-r23 puoi usare i seguenti attributi direttamente sul tuo Toolbar
o sul suo stile:
app:titleTextColor="@color/primary_text"
app:subtitleTextColor="@color/secondary_text"
Se il tuo SDK minimo è 23 e utilizzi nativo, Toolbar
cambia il prefisso dello spazio dei nomi in android
.
In Java puoi utilizzare i seguenti metodi:
toolbar.setTitleTextColor(Color.WHITE);
toolbar.setSubtitleTextColor(Color.WHITE);
Questi metodi accettano un int colore non un ID risorsa colore!
Opzione 2) Ignora lo stile della barra degli strumenti e gli attributi del tema
layout / xxx.xml
<android.support.v7.widget.Toolbar
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:theme="@style/ThemeOverlay.MyApp.ActionBar"
app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
style="@style/Widget.MyApp.Toolbar.Solid"/>
Valori / styles.xml
<style name="Widget.MyApp.Toolbar.Solid" parent="Widget.AppCompat.ActionBar">
<item name="android:background">@color/actionbar_color</item>
<item name="android:elevation" tools:ignore="NewApi">4dp</item>
<item name="titleTextAppearance">...</item>
</style>
<style name="ThemeOverlay.MyApp.ActionBar" parent="ThemeOverlay.AppCompat.ActionBar">
<!-- Parent theme sets colorControlNormal to textColorPrimary. -->
<item name="android:textColorPrimary">@color/actionbar_title_text</item>
</style>
Aiuto! Anche le mie icone hanno cambiato colore!
@PeterKnut ha riferito che ciò influisce sul colore del pulsante di overflow, del pulsante del cassetto di navigazione e del pulsante Indietro. Cambia anche il colore del testo di SearchView
.
Per quanto riguarda i colori delle icone: colorControlNormal
eredita da
android:textColorPrimary
per temi scuri (bianco su nero)
android:textColorSecondary
per temi chiari (nero su bianco)
Se lo applichi al tema della barra delle azioni , puoi personalizzare il colore dell'icona.
<item name="colorControlNormal">#de000000</item>
C'era un bug in appcompat-v7 fino a r23 che richiedeva di sovrascrivere anche la controparte nativa in questo modo:
<item name="android:colorControlNormal" tools:ignore="NewApi">?colorControlNormal</item>
Aiuto! Il mio SearchView è un casino!
Nota: questa sezione è probabilmente obsoleta.
Dato che utilizzi il widget di ricerca che per qualche motivo utilizza una freccia indietro diversa (non visivamente, tecnicamente) da quella inclusa con appcompat-v7, devi impostarla manualmente nel tema dell'app . I drawables della libreria di supporto vengono colorati correttamente. Altrimenti sarebbe sempre bianco.
<item name="homeAsUpIndicator">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>
Per quanto riguarda il testo della vista di ricerca ... non esiste un modo semplice. Dopo aver scavato nella sua fonte ho trovato un modo per arrivare alla visualizzazione del testo. Non l'ho testato, quindi fammi sapere nei commenti se non ha funzionato.
SearchView sv = ...; // get your search view instance in onCreateOptionsMenu
// prefix identifier with "android:" if you're using native SearchView
TextView tv = sv.findViewById(getResources().getIdentifier("id/search_src_text", null, null));
tv.setTextColor(Color.GREEN); // and of course specify your own color
Bonus: sovrascrivi lo stile di ActionBar e gli attributi del tema
Lo stile appropriato per un'azione predefinita barra delle azioni appcompat-v7 sarebbe simile a questo:
<!-- ActionBar vs Toolbar. -->
<style name="Widget.MyApp.ActionBar.Solid" parent="Widget.AppCompat.ActionBar.Solid">
<item name="background">@color/actionbar_color</item> <!-- No prefix. -->
<item name="elevation">4dp</item> <!-- No prefix. -->
<item name="titleTextStyle">...</item> <!-- Style vs appearance. -->
</style>
<style name="Theme.MyApp" parent="Theme.AppCompat">
<item name="actionBarStyle">@style/Widget.MyApp.ActionBar.Solid</item>
<item name="actionBarTheme">@style/ThemeOverlay.MyApp.ActionBar</item>
<item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
</style>