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>
user3065901
la source
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.

Zielony
la source
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>
Bolling
la source
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)

D_Alpha
la source
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>
Pratik Butani
la source
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.

Lelouch
la source
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

Fariz Agayev
la source
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.

Dawid Polakowski
la source