Pirulito Android alterar barra de navegação cor

137

No meu aplicativo, preciso alterar a cor da barra de navegação inferior. Eu assisti muitos post, mas não consigo encontrar com a solução. Estou usando a biblioteca appCompat.

insira a descrição da imagem aqui

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
fonte
você pode postar o arquivo style.xml? Não é a coisa toda. Trechos apenas relacionados
Blackbelt
Como posso recuperar a cor padrão?
GMX

Respostas:

262

Isso pode ser feito dentro de styles.xml usando

<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)

Observe que o método foi introduzido no Android Lollipop e não funcionará na versão da API <21.

O segundo método (funciona no KitKat) é definir windowTranslucentNavigation como true no manifesto e colocar uma exibição colorida abaixo da barra de navegação.

Zielony
fonte
Obrigado. Eu adicionei ao meu código de estilos <item name = "android: navigationBarColor"> @ color / MyColor </item> e agora funciona.
precisa saber é o seguinte
31
Existe uma maneira de mudar a cor dos ícones também?
Jamsheed Kamarudeen
10
<item name="android:navigationBarColor">@color/theme_color</item>adicionar na values-21pasta
Pratik Butani
Também certifique-se de que (Target versão Android) está definida para pelo menos API 21
MujtabaFR
2
Não coloque isso no arquivo de estilo. <item name="android:windowDrawsSystemBarBackgrounds">false</item>Caso contrário, a coloração da barra do sistema não funcionará.
Alexey Ozerov
70

Aqui está como fazê-lo programaticamente:

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

Usando a biblioteca Compat:

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

Aqui está como fazer isso com o xml na pasta values-v21 / style.xml:

<item name="android:navigationBarColor">@color/your_color</item>
Bolling
fonte
1
Esta é uma opção estranha! Eu tenho um aplicativo que faz a preto barra de navegação com botões pretos tornando impossível ver / BACK / últimos botões macios casa ...
JohnyTex
37

Aqui estão algumas maneiras de alterar a cor da barra de navegação.

Pelo XML

1- valores-v21 / style.xml

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

Ou, se você quiser fazer isso usando apenas os valores / pasta,

2- valores / style.xml

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

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

Você também pode alterar a cor da barra de navegação por programação .

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

Usando a Biblioteca compatível

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

encontre o link para obter mais detalhes - http://developer.android.com/reference/android/view/Window.html#setNavigationBarColor(int)

D_Alpha
fonte
Eu não fui capaz de usar tools:targetApi? Essa funcionalidade está desatualizada?
precisa saber é o seguinte
1
@winklerrr Não está desatualizado, veja minha resposta atualizada.
D_Alpha
Se eu decidir mudar a cor programaticamente - preciso fazer isso em cada Activity/ Fragment? Ou existe um certo lugar onde eu devo fazer isso? Talvez na aula que se estende Application?
winklerrr
1
Você precisa fazer isso em cada atividade ou pode criar estilos diferentes para atividades diferentes.
D_Alpha
Não há necessidade de substituição styles.xmldurante o usotools:targetApi
Farshad Tahmasbi
8

Você pode adicionar a seguinte linha na pasta values-v21 / style.xml :

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

Você também pode modificar seu tema usando o Editor de temas, clicando em:

Ferramentas -> Android -> Editor de temas

Então, você nem precisa colocar conteúdo extra nos arquivos .xml ou .class.

Lelouch
fonte
Boa dica! Para mim, foi apenas em Ferramentas -> Editor de temas.
Sam
Agora, o Theme Editor desapareceu, começando com o 3.3.
Jenix 19/03
1
  1. Criar cor preta: <color name="blackColorPrimary">#000001</color> (not #000000)
  2. Escreva com estilo: <item name="android:navigationBarColor" tools:targetApi="lollipop">@color/blackColorPrimary</item>

O problema é que a versão superior do android faz trasparent para # 000000

Fariz Agayev
fonte
0

Você pode alterá-lo diretamente no arquivo styles.xml \ app \ src \ main \ res \ values ​​\ styles.xml

Este trabalho em versões mais antigas, eu estava mudando no KitKat e venha aqui.

Dawid Polakowski
fonte