Android sucette changer la couleur de la barre de navigation


137

Dans mon application, je dois changer la couleur de la barre de navigation inférieure. J'ai regardé beaucoup de messages mais je ne trouve pas la solution. J'utilise la bibliothèque appCompat.

entrez la description de l'image ici

v21 / styles.xml

<style name="AppTheme" parent="Theme.AppCompat.Light">
       <item name="android:windowBackground">@drawable/bgpreview</item>
       <item name="android:colorPrimary">@color/MyColor</item>
       <item name="android:colorPrimaryDark">@color/MyColor</item>
       <item name="android:windowContentOverlay">@null</item>
       <item name="android:textColorPrimary">@color/MyColor</item>
       <item name="colorAccent">@color/MyColor</item>
       <!-- darker variant for the status bar and contextual app bars -->
       <item name="android:windowContentTransitions">true</item>
       <item name="android:windowAllowEnterTransitionOverlap">true</item>
       <item name="android:windowAllowReturnTransitionOverlap">true</item>
       <item name="android:windowSharedElementEnterTransition">@android:transition/move</item>
       <item name="android:windowSharedElementExitTransition">@android:transition/move</item>

       <item name="windowActionBar">false</item>
       <item name="android:textAllCaps">false</item>

</style>

pouvez-vous publier le fichier style.xml? Pas le tout. Just related snippets
Blackbelt

Comment puis-je réinitialiser la couleur par défaut?
GMX

Réponses:


262

Cela peut être fait dans styles.xml en utilisant

<item name="android:navigationBarColor">@color/theme_color</item>

ou

window.setNavigationBarColor(@ColorInt int color)

http://developer.android.com/reference/android/view/Window.html#setNavigationBarColor(int)

Notez que la méthode a été introduite dans Android Lollipop et ne fonctionnera pas sur la version d'API <21.

La deuxième méthode (fonctionne sur KitKat) consiste à définir windowTranslucentNavigation sur true dans le manifeste et à placer une vue colorée sous la barre de navigation.


Je vous remercie. J'ai ajouté à mon code de styles <item name = "android: navigationBarColor"> @ color / MyColor </item> et fonctionne maintenant.
user3065901

31
Existe-t-il également un moyen de changer la couleur des icônes?
Jamsheed Kamarudeen

10
<item name="android:navigationBarColor">@color/theme_color</item>ajouter dans le values-21dossier
Pratik Butani

Assurez-vous également que (Target Android Version) est défini sur au moins API 21
MujtabaFR

2
Ne mettez pas cela dans votre fichier de style. <item name="android:windowDrawsSystemBarBackgrounds">false</item>Sinon, la coloration de la barre système ne fonctionnera pas.
Alexey Ozerov

70

Voici comment procéder par programme:

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {                
   getWindow().setNavigationBarColor(getResources().getColor(R.color.your_awesome_color));
}

Utilisation de la bibliothèque Compat:

if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.primary));
}

Voici comment le faire avec xml dans le dossier values-v21 / style.xml:

<item name="android:navigationBarColor">@color/your_color</item>

1
C'est une option étrange! J'ai une application qui rend la barre de navigation noire avec des boutons noirs, ce qui rend impossible de voir les boutons
contextuels d'

37

Voici quelques façons de changer la couleur de la barre de navigation.

Par le XML

1- valeurs-v21 / style.xml

<item name="android:navigationBarColor">@color/navigationbar_color</item>

Ou si vous voulez le faire uniquement en utilisant les valeurs / dossier alors-

2- valeurs / style.xml

<resources xmlns:tools="http://schemas.android.com/tools">

<item name="android:navigationBarColor" tools:targetApi="21">@color/navigationbar_color</item>

Vous pouvez également changer la couleur de la barre de navigation par programmation .

 if (Build.VERSION.SDK_INT >= 21)
    getWindow().setNavigationBarColor(getResources().getColor(R.color.navigationbar_color));

En utilisant la bibliothèque de compatibilité

if (Build.VERSION.SDK_INT >= 21) {
    getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.primary));
}

Veuillez trouver le lien pour plus de détails - http://developer.android.com/reference/android/view/Window.html#setNavigationBarColor(int)


Je n'ai pas pu utiliser tools:targetApi? Cette fonctionnalité est-elle obsolète?
winklerrr

1
@winklerrr Ce n'est pas obsolète, voir ma réponse mise à jour.
D_Alpha

Si je décide de changer la couleur par programmation, dois-je le faire dans chaque Activity/ Fragment? Ou y a-t-il un endroit où je devrais le faire? Peut-être en classe qui s'étend Application?
winklerrr

1
Vous devez le faire dans chaque activité ou vous pouvez créer un style différent pour différentes activités.
D_Alpha

Pas besoin de passer outre styles.xmllors de l'utilisationtools:targetApi
Farshad Tahmasbi

8

Vous pouvez ajouter la ligne suivante dans le dossier values-v21 / style.xml :

<item name="android:navigationBarColor">@color/theme_color</item>

1

Vous pouvez également modifier votre thème à l'aide de l'éditeur de thème en cliquant sur:

Outils -> Android -> Éditeur de thèmes

Ensuite, vous n'avez même pas besoin de mettre du contenu supplémentaire dans vos fichiers .xml ou .class.


Bon conseil! Pour moi, c'était juste sous Outils -> Éditeur de thèmes.
Sam

L'éditeur de thèmes est maintenant parti à partir de la version 3.3.
Jenix

1
  1. Créer une couleur noire: <color name="blackColorPrimary">#000001</color> (not #000000)
  2. Écrivez avec style: <item name="android:navigationBarColor" tools:targetApi="lollipop">@color/blackColorPrimary</item>

Le problème est que la version supérieure d'Android rend transparent pour # 000000


0

Vous pouvez le modifier directement dans le fichier styles.xml \ app \ src \ main \ res \ values ​​\ styles.xml

Ce travail sur des versions plus anciennes, je le changeais dans KitKat et viens ici.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.