Le bouton de navigation appcompat - qui est simplement un AppCompatImageButton
- peut être désigné par l'attribut toolbarNavigationButtonStyle
. Le style par défaut pour cela dans les thèmes AppCompat
est Widget.AppCompat.Toolbar.Button.Navigation
, et nous pouvons étendre ce style pour ajouter une valeur d'attribut tint
. Par exemple:
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
...
<item name="toolbarNavigationButtonStyle">@style/Toolbar.Button.Navigation.Tinted</item>
</style>
<style name="Toolbar.Button.Navigation.Tinted" parent="Widget.AppCompat.Toolbar.Button.Navigation">
<item name="tint">@color/nav_button_tint</item>
</style>
Il y a quelques mises en garde à connaître lors de l'utilisation de cette méthode.
Avant de soutenir la version bibliothèque 25.4.0, AppCompatImageButton
n'a pas offert son propre attribut tint
, et donc un attribut tint
dans l'espace de noms de l'application ne sera pas applicable (et tout simplement pas exister, à moins que définies ailleurs). Il est nécessaire d'utiliser l'attribut android:tint
de la plateforme si vous utilisez la bibliothèque de support version 25.3.0 ou antérieure.
Malheureusement, cela conduit à une autre prise, en ce que la teinte de la plate-forme avant Lollipop (niveau API 21) ne peut traiter que de simples, des valeurs de couleur unique, et en utilisant une valeur de ressources ColorStateList
(<selector>
) provoquera une Exception
à être jeté . Cela ne pose aucun problème si la valeur android:tint
est une couleur simple, mais il est souvent souhaité de colorer l'icône de navigation pour correspondre à un autre attribut de couleur de thème, qui peut très bien être un ColorStateList
. Dans ce cas, il est nécessaire de créer des styles distincts dans res/values/
et res/values-21/
, en spécifiant une valeur de couleur simple pour android:tint
dans res/values/
.
Par exemple, si teinter pour correspondre à la couleur du texte principal du thème:
res/values/styles.xml
<item name="android:tint">@color/normal_text_color</item>
res/values-v21/styles.xml
<item name="android:tint">?android:textColorPrimary</item>
Il vous suffit de vous préoccuper des notes ci-dessus si vous êtes coincé en utilisant une version de bibliothèque de support inférieure à 25.4.0.