Android lollipop cambia el color de la barra de navegación

137

En mi aplicación, necesito cambiar el color de la barra de navegación inferior. Vi muchas publicaciones pero no puedo encontrar la solución. Estoy usando la biblioteca appCompat.

ingrese la descripción de la imagen aquí

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>
usuario3065901
fuente
¿Puedes publicar el archivo style.xml? No todo el asunto. Fragmentos relacionados
Blackbelt
¿Cómo puedo volver a configurar el color predeterminado?
GMX

Respuestas:

262

Se puede hacer dentro de 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)

Tenga en cuenta que el método se introdujo en Android Lollipop y no funcionará en la versión API <21.

El segundo método (funciona en KitKat) es establecer windowTranslucentNavigation en true en el manifiesto y colocar una vista en color debajo de la barra de navegación.

Zielony
fuente
Gracias. Agregué a mi código de estilos <item name = "android: navigationBarColor"> @ color / MyColor </item> y ahora funciona.
user3065901
31
¿Hay alguna forma de cambiar el color de los íconos también?
Jamsheed Kamarudeen
10
<item name="android:navigationBarColor">@color/theme_color</item>agregar en la values-21carpeta
Pratik Butani
También asegúrese de que (Target Android Version) esté configurado al menos en API 21
MujtabaFR
2
No ponga esto en su archivo de estilo. <item name="android:windowDrawsSystemBarBackgrounds">false</item>De lo contrario, el color de la barra del sistema no funcionará.
Alexey Ozerov el
70

Aquí está cómo hacerlo programáticamente:

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

Usando la biblioteca Compat:

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

Aquí se explica cómo hacerlo con xml en la carpeta values-v21 / style.xml:

<item name="android:navigationBarColor">@color/your_color</item>
Bolling
fuente
1
Esta es una opción extraña! Tengo una aplicación que hace que la barra de navegación sea negra con botones negros que hacen que sea imposible ver los botones de inicio / atrás / recientes ...
JohnyTex
37

Aquí hay algunas formas de cambiar el color de la barra de navegación.

Por el XML

1- valores-v21 / style.xml

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

O si desea hacerlo solo usando los valores / carpeta entonces-

2- valores / style.xml

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

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

También puede cambiar el color de la barra de navegación por programación .

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

Mediante el uso de la biblioteca Compat

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

encuentre el enlace para obtener más detalles: http://developer.android.com/reference/android/view/Window.html#setNavigationBarColor(int)

D_Alpha
fuente
No pude usar tools:targetApi? ¿Esta funcionalidad está desactualizada?
winklerrr
1
@winklerrr No está desactualizado, mira mi respuesta actualizada.
D_Alpha
Si decido cambiar el color mediante programación, ¿tengo que hacer esto en cada Activity/ Fragment? ¿O hay un cierto lugar donde debería hacerlo? Tal vez en clase que se extiende Application?
winklerrr
1
Debe hacer esto en cada Actividad o puede hacer un estilo diferente para una actividad diferente.
D_Alpha
No es necesario anular styles.xmlmientras se usatools:targetApi
Farshad Tahmasbi
8

Puede agregar la siguiente línea en la carpeta values-v21 / style.xml :

<item name="android:navigationBarColor">@color/theme_color</item>
Pratik Butani
fuente
1

También puede modificar su tema usando el Editor de temas haciendo clic en:

Herramientas -> Android -> Editor de temas

Entonces, ni siquiera necesita poner contenido adicional en sus archivos .xml o .class.

Lelouch
fuente
Buen consejo! Para mí, estaba justo debajo de Herramientas -> Editor de temas.
Sam
Ahora Theme Editor se ha ido comenzando con 3.3.
Jenix
1
  1. Crear color negro: <color name="blackColorPrimary">#000001</color> (not #000000)
  2. Escribir en estilo: <item name="android:navigationBarColor" tools:targetApi="lollipop">@color/blackColorPrimary</item>

El problema es que la versión superior de Android es transparente para # 000000

Fariz Agayev
fuente
0

Puede cambiarlo directamente en el archivo styles.xml \ app \ src \ main \ res \ values ​​\ styles.xml

Este trabajo en versiones anteriores, lo estaba cambiando en KitKat y vine aquí.

Dawid Polakowski
fuente