Android льодяник змінює колір панелі навігації


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>

Ви можете опублікувати файл 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) - встановити вікноTranslucentNavigation на істинне в маніфесті та розмістити кольоровий вигляд під навігаційною панеллю.


Дякую. Я додав до свого стилю код <item name = "android: navigationBarColor"> @ color / MyColor </item> і зараз працює.
користувач3065901

31
Чи є спосіб змінити колір піктограм?
Jamsheed Kamarudeen

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 у папці значень-v21 / style.xml:

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

1
Це дивний варіант! У мене є додаток, який робить чорний кнопок з чорними кнопками, що робить неможливим побачити домашні / назад / останні програмні кнопки ...
JohnyTex

37

Ось кілька способів змінити колір панелі навігації.

За XML

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

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

Або якщо ви хочете зробити це лише за допомогою значень / папки,

2–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));

Використовуючи бібліотеку Compat-

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)


Я не зміг користуватися tools:targetApi? Ця функціональність застаріла?
winklerrr

1
@winklerrr Це не застаріло, дивіться мою оновлену відповідь.
D_Alpha

Якщо я вирішив змінити колір програмно - чи потрібно це робити в кожному Activity/ Fragment? Або є певне місце, де я повинен це зробити? Можливо, в класі, який поширюється Application?
winklerrr

1
Це потрібно робити в кожному занятті, або ви можете створити різний стиль для різних видів діяльності.
D_Alpha

Не потрібно переосмислювати styles.xmlпід час використанняtools:targetApi
Farshad Tahmasbi

8

Ви можете додати наступний рядок у папку значень-v21 / style.xml :

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

1

Ви також можете змінити свою тему за допомогою редактора тем, натиснувши:

Інструменти -> Android -> Редактор тем

Тоді вам навіть не потрібно вводити додатковий вміст у ваші файли .xml або .class.


Гарна порада! Для мене це було лише під меню Інструменти -> Редактор тем.
Сем

Тепер редактор тем починається з 3.3.
Дженікс

1
  1. Створіть чорний колір: <color name="blackColorPrimary">#000001</color> (not #000000)
  2. Пишіть стилем: <item name="android:navigationBarColor" tools:targetApi="lollipop">@color/blackColorPrimary</item>

Проблема полягає в тому, що версія для Android з вищою версією робить прозорою для # 000000


0

Ви можете змінити його безпосередньо у файлі styles.xml \ app \ src \ main \ res \ values ​​\ styles.xml

Це робота на старих версіях, я змінював її в KitKat і приходив сюди.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.