Lecca lecca Android cambia colore barra di navigazione


137

Nella mia app ho bisogno di cambiare il colore della barra di navigazione in basso. Ho visto molti post ma non riesco a trovare la soluzione. Sto usando la libreria appCompat.

inserisci qui la descrizione dell'immagine

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>

puoi pubblicare il file style.xml? Non tutto. Snippet correlati
Blackbelt

Come posso ripristinare il colore predefinito?
GMX,

Risposte:


262

Può essere fatto all'interno di styles.xml usando

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

o

window.setNavigationBarColor(@ColorInt int color)

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

Si noti che il metodo è stato introdotto in Android Lollipop e non funziona con la versione API <21.

Il secondo metodo (funziona su KitKat) è impostare windowTranslucentNavigation su true nel manifest e posizionare una vista colorata sotto la barra di navigazione.


Grazie. Ho aggiunto al mio codice di stile <item name = "android: navigationBarColor"> @ color / MyColor </item> e ora funziona.
user3065901

31
C'è un modo per cambiare anche il colore delle icone?
Jamsheed Kamarudeen,

10
<item name="android:navigationBarColor">@color/theme_color</item>aggiungi nella values-21cartella
Pratik Butani

Assicurati anche che (Versione Android di destinazione) sia impostato almeno
sull'API

2
Non inserirlo nel file di stile <item name="android:windowDrawsSystemBarBackgrounds">false</item>Altrimenti la colorazione della barra di sistema non funzionerà.
Alexey Ozerov,

70

Ecco come farlo programmaticamente:

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

Utilizzando la libreria Compat:

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

Ecco come farlo con xml nella cartella valori-v21 / style.xml:

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

1
Questa è un'opzione strana! Ho un'app che rende la barra di navigazione nera con pulsanti neri che rendono impossibile vedere i pulsanti soft home / back / recent ...
JohnyTex

37

Ecco alcuni modi per cambiare il colore della barra di navigazione.

Dall'XML

1- valori-v21 / style.xml

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

O se vuoi farlo solo usando i valori / cartella allora-

2- valori / style.xml

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

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

Puoi anche cambiare il colore della barra di navigazione programmando .

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

Utilizzando la libreria Compat-

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

per maggiori informazioni, consultare il link http://developer.android.com/reference/android/view/Window.html#setNavigationBarColor(int)


Non sono riuscito a usare tools:targetApi? Questa funzionalità è obsoleta?
winklerrr,

1
@winklerrr Non è obsoleto, vedi la mia risposta aggiornata.
D_Alpha,

Se decido di cambiare il colore a livello di codice - devo farlo in ciascuno Activity/ Fragment? O c'è un certo posto dove dovrei farlo? Forse in classe che si estende Application?
winklerrr,

1
Devi farlo in ogni attività o puoi creare stili diversi per attività diverse.
D_Alpha,

Non è necessario eseguire l'override styles.xmldurante l'utilizzotools:targetApi
Farshad Tahmasbi l'

8

È possibile aggiungere la seguente riga nella cartella valori-v21 / style.xml :

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

1

Puoi anche modificare il tema usando l'Editor dei temi facendo clic su:

Strumenti -> Android -> Editor temi

Quindi, non è nemmeno necessario inserire del contenuto aggiuntivo nei file .xml o .class.


Bel consiglio! Per me era proprio sotto Strumenti -> Editor temi.
Sam,

Ora l'Editor dei temi non funziona più con 3.3.
Jenix

1
  1. Crea colore nero: <color name="blackColorPrimary">#000001</color> (not #000000)
  2. Scrivi con stile: <item name="android:navigationBarColor" tools:targetApi="lollipop">@color/blackColorPrimary</item>

Il problema è che la versione superiore di Android rende trasparente per # 000000


0

Puoi cambiarlo direttamente nel file styles.xml \ app \ src \ main \ res \ valori \ styles.xml

Questo lavoro su versioni precedenti, lo stavo cambiando in KitKat e vieni qui.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.