Option 1) Le moyen rapide et facile (barre d'outils uniquement)
Depuis appcompat-v7-r23, vous pouvez utiliser les attributs suivants directement sur votre Toolbar
ou son style:
app:titleTextColor="@color/primary_text"
app:subtitleTextColor="@color/secondary_text"
Si votre SDK minimum est de 23 et que vous utilisez natif, Toolbar
remplacez 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' colorControlNormal
hé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>