Android lollipop изменить цвет панели навигации

137

В моем приложении мне нужно изменить цвет нижней панели навигации. Я смотрел много сообщений, но не могу найти решение. Я использую библиотеку appCompat.

введите описание изображения здесь

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
источник
вы можете опубликовать файл style.xml? Не все. Просто связанные отрывки
Blackbelt
Как я могу вернуть цвет по умолчанию?
GMX

Ответы:

262

Это можно сделать внутри styles.xml, используя

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

или

window.setNavigationBarColor(@ColorInt int color)

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

Обратите внимание, что этот метод был представлен в Android Lollipop и не будет работать с версией API <21.

Второй метод (работает на KitKat) - установить для windowTranslucentNavigation значение true в манифесте и разместить цветное представление под панелью навигации.

Zielony
источник
Спасибо. Я добавил в свой код стилей <item name = "android: navigationBarColor"> @ color / MyColor </item> и теперь работает.
user3065901 08
31
Есть ли способ изменить цвет значков?
Джамшид Камарудин,
10
<item name="android:navigationBarColor">@color/theme_color</item>добавить в values-21папку
Pratik Butani
Также убедитесь, что для параметра (Целевая версия Android) установлено значение как минимум API 21
MujtabaFR
2
Не помещайте это в свой файл стиля, <item name="android:windowDrawsSystemBarBackgrounds">false</item>иначе раскраска системной панели не сработает.
Алексей Озеров
70

Вот как это сделать программно:

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

Использование библиотеки Compat:

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

Вот как это сделать с xml в папке values-v21 / style.xml:

<item name="android:navigationBarColor">@color/your_color</item>
Bolling
источник
1
Странный вариант! У меня есть приложение, которое делает панель навигации черной с черными кнопками, что делает невозможным
отображение
37

Вот несколько способов изменить цвет панели навигации.

По XML

1- значения-v21 / style.xml

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

Или, если вы хотите сделать это только с использованием папки values ​​/, тогда -

2- значения / style.xml

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

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

Вы также можете изменить цвет панели навигации путем программирования .

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

Используя библиотеку совместимости-

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

пожалуйста, найдите ссылку для получения дополнительной информации: http://developer.android.com/reference/android/view/Window.html#setNavigationBarColor(int)

D_Alpha
источник
Я не смог использовать tools:targetApi? Эта функция устарела?
winklerrr
1
@winklerrr Это не устарело, см. мой обновленный ответ.
D_Alpha
Если я решу изменить цвет программно - нужно ли это делать в каждом Activity/ Fragment? Или есть определенное место, где я должен это сделать? Может в классе что расширяется Application?
winklerrr
1
Это нужно делать в каждом действии, или вы можете создать разные стили для разных занятий.
D_Alpha
Нет необходимости переопределять styles.xmlпри использованииtools:targetApi
Фаршад Тахмасби
8

Вы можете добавить следующую строку в папку values-v21 / style.xml :

<item name="android:navigationBarColor">@color/theme_color</item>
Пратик Бутани
источник
1

Вы также можете изменить свою тему с помощью редактора тем, нажав:

Инструменты -> Android -> Редактор тем

Тогда вам даже не нужно будет помещать дополнительный контент в файлы .xml или .class.

Лелуш
источник
Хороший совет! Для меня это было просто в разделе Инструменты -> Редактор тем.
Сэм
Теперь редактор тем исчез, начиная с версии 3.3.
Jenix
1
  1. Создать черный цвет: <color name="blackColorPrimary">#000001</color> (not #000000)
  2. Напишите в стиле: <item name="android:navigationBarColor" tools:targetApi="lollipop">@color/blackColorPrimary</item>

Проблема в том, что более поздняя версия Android делает trasparent для # 000000

Фариз Агаев
источник
0

Вы можете изменить его прямо в styles.xml \ app \ src \ main \ res \ values ​​\ styles.xml

Это работа над более старыми версиями, я менял это в KitKat и зашел сюда.

Давид Полаковски
источник