Option 1) Le moyen rapide et facile (barre d'outils uniquement)
Depuis appcompat-v7-r23, vous pouvez utiliser les attributs suivants directement sur votre Toolbarou son style:
app:titleTextColor="@color/primary_text"
app:subtitleTextColor="@color/secondary_text"
Si votre SDK minimum est de 23 et que vous utilisez natif, Toolbarremplacez simplement le préfixe de l'espace de noms par android.
En Java, vous pouvez utiliser les méthodes suivantes:
toolbar.setTitleTextColor(Color.WHITE);
toolbar.setSubtitleTextColor(Color.WHITE);
Ces méthodes prennent une couleur int et non un ID de ressource de couleur!
Option 2) Remplacer le style de la barre d'outils et les attributs de thème
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"/>
values / 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>
Aidez-moi! Mes icônes ont aussi changé de couleur!
@PeterKnut a signalé que cela affecte la couleur du bouton de débordement, du bouton du tiroir de navigation et du bouton de retour. Il change également la couleur du texte de SearchView.
Concernant les couleurs des icônes: L' colorControlNormalhérite de
android:textColorPrimary pour les thèmes sombres (blanc sur noir)
android:textColorSecondary pour les thèmes clairs (noir sur blanc)
Si vous appliquez cela au thème de la barre d'action , vous pouvez personnaliser la couleur de l'icône.
<item name="colorControlNormal">#de000000</item>
Il y avait un bogue dans appcompat-v7 jusqu'à r23 qui vous obligeait à remplacer également l'homologue natif comme ceci:
<item name="android:colorControlNormal" tools:ignore="NewApi">?colorControlNormal</item>
Aidez-moi! Mon SearchView est en désordre!
Remarque: cette section est peut-être obsolète.
Puisque vous utilisez le widget de recherche qui, pour une raison quelconque, utilise une flèche de retour différente (pas visuellement, techniquement) de celle incluse avec appcompat-v7, vous devez le définir manuellement dans le thème de l' application . Les dessinables de la bibliothèque de support sont correctement teintés. Sinon, ce serait toujours blanc.
<item name="homeAsUpIndicator">@drawable/abc_ic_ab_back_mtrl_am_alpha</item>
Quant au texte de la vue de recherche ... il n'y a pas de moyen facile. Après avoir fouillé sa source, j'ai trouvé un moyen d'accéder à la vue texte. Je n'ai pas testé cela, alors faites-le moi savoir dans les commentaires si cela n'a pas fonctionné.
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: remplacer le style ActionBar et les attributs du thème
Un style approprié pour une action par défaut de la barre d'action appcompat-v7 ressemblerait à ceci:
<!-- 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>