Android Lollipop zmienia kolor paska nawigacji

141

W mojej aplikacji muszę zmienić kolor dolnego paska nawigacyjnego. Obejrzałem wiele postów, ale nie mogę znaleźć rozwiązania. Używam biblioteki appCompat.

wprowadź opis obrazu tutaj

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
źródło
czy możesz wysłać plik style.xml? Nie wszystko. Tylko powiązane fragmenty
Blackbelt
Jak mogę przywrócić domyślny kolor?
GMX

Odpowiedzi:

274

Można to zrobić wewnątrz styles.xml za pomocą

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

lub

window.setNavigationBarColor(@ColorInt int color)

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

Zwróć uwagę, że metoda została wprowadzona w systemie Android Lollipop i nie będzie działać na interfejsie API w wersji <21.

Druga metoda (działa na KitKat) polega na ustawieniu parametru windowTranslucentNavigation na wartość true w manifeście i umieszczeniu kolorowego widoku pod paskiem nawigacji.

Zielony
źródło
Dziękuję Ci. Dodałem do mojego kodu stylów <item name = "android: navigationBarColor"> @ color / MyColor </item> i teraz działa.
user3065901
34
Czy jest też sposób na zmianę koloru ikon?
Jamsheed Kamarudeen
10
<item name="android:navigationBarColor">@color/theme_color</item>dodaj w values-21folderze
Pratik Butani
Upewnij się również, że (docelowa wersja systemu Android) jest ustawiona na co najmniej API 21
MujtabaFR
2
Nie umieszczaj tego w swoim pliku stylu <item name="android:windowDrawsSystemBarBackgrounds">false</item>W przeciwnym razie kolorowanie paska systemowego nie będzie działać.
Alexey Ozerov
71

Oto jak to zrobić programowo:

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

Korzystanie z biblioteki Compat:

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

Oto jak to zrobić z XML w folderze values-v21 / style.xml:

<item name="android:navigationBarColor">@color/your_color</item>
Bolling
źródło
1
To dziwna opcja! Mam aplikację, która sprawia, że ​​pasek nawigacyjny jest czarny z czarnymi przyciskami, co uniemożliwia wyświetlenie przycisków
ekranowych
38

Oto kilka sposobów zmiany koloru paska nawigacji.

Według XML

1- wartości-v21 / style.xml

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

Lub jeśli chcesz to zrobić tylko przy użyciu wartości / folderu, a następnie-

2- wartości / style.xml

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

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

Możesz także zmienić kolor paska nawigacji poprzez programowanie .

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

Korzystając z biblioteki Compat

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

znajdź link, aby uzyskać więcej informacji - http://developer.android.com/reference/android/view/Window.html#setNavigationBarColor(int)

D_Alpha
źródło
Nie mogłem użyć tools:targetApi? Czy ta funkcja jest nieaktualna?
winklerrr
1
@winklerrr To nie jest nieaktualne, zobacz moją zaktualizowaną odpowiedź.
D_Alpha
Jeśli zdecyduję się programowo zmienić kolor - czy muszę to robić w każdym Activity/ Fragment? Czy jest jakieś miejsce, w którym powinienem to zrobić? Może w klasie, która się rozszerza Application?
winklerrr
1
Musisz to zrobić w każdym ćwiczeniu lub możesz stworzyć inny styl dla różnych zajęć.
D_Alpha
Nie ma potrzeby nadpisywania styles.xmlpodczas używaniatools:targetApi
Farshad Tahmasbi
8

W folderze values-v21 / style.xml można dodać następujący wiersz :

<item name="android:navigationBarColor">@color/theme_color</item>
Pratik Butani
źródło
2
  1. Utwórz kolor czarny: <color name="blackColorPrimary">#000001</color> (not #000000)
  2. Pisz w stylu: <item name="android:navigationBarColor" tools:targetApi="lollipop">@color/blackColorPrimary</item>

Problem polega na tym, że wyższa wersja Androida czyni trasparent dla # 000000

Fariz Agayev
źródło
Jeśli robisz wszystko poprawnie i NADAL nie działa, to właśnie zadziałało. Wydaje się, że nigdzie nie wspomniano, że # 000000 nie zadziała.
Matija Martic
1

Możesz także zmodyfikować motyw za pomocą Edytora motywów, klikając:

Narzędzia -> Android -> Edytor motywów

Wtedy nie musisz nawet umieszczać dodatkowej zawartości w plikach .xml lub .class.

Lelouch
źródło
Niezła wskazówka! Dla mnie to było po prostu pod Narzędzia -> Edytor motywów.
Sam
Teraz edytor motywów zniknął, począwszy od wersji 3.3.
Jenix
0

Możesz to zmienić bezpośrednio w pliku styles.xml \ app \ src \ main \ res \ values ​​\ styles.xml

Ta praca na starszych wersjach, zmieniałem ją w KitKat i przyszedłem tutaj.

Dawid Polakowski
źródło