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>

¿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.


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>

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)


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>

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.


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


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í.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.