Android lollipop mengubah warna bilah navigasi

137

Di aplikasi saya, saya perlu mengubah warna bilah navigasi bawah. Saya menyaksikan banyak posting tetapi tidak dapat menemukan dengan solusinya. Saya menggunakan pustaka appCompat.

masukkan deskripsi gambar di sini

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>
pengguna3065901
sumber
dapatkah Anda memposting file style.xml? Bukan semuanya. Cuplikan yang terkait
Blackbelt
Bagaimana saya dapat mengatur kembali warna default?
GMX

Jawaban:

262

Itu bisa dilakukan di dalam styles.xml menggunakan

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

atau

window.setNavigationBarColor(@ColorInt int color)

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

Perhatikan bahwa metode ini diperkenalkan di Android Lollipop dan tidak akan berfungsi pada versi API <21.

Metode kedua (berfungsi pada KitKat) adalah mengatur windowTranslucentNavigation menjadi true dalam manifes dan menempatkan tampilan berwarna di bawah bilah navigasi.

Zielony
sumber
Terima kasih. Saya menambahkan ke kode gaya saya <item name = "android: navigationBarColor"> @ color / MyColor </item> dan sekarang berfungsi.
user3065901
31
Apakah ada cara untuk mengubah warna ikon juga?
Jamsheed Kamarudeen
10
<item name="android:navigationBarColor">@color/theme_color</item>tambahkan dalam values-21folder
Pratik Butani
Juga pastikan bahwa (Versi Android Target) diatur ke setidaknya API 21
MujtabaFR
2
Jangan letakkan ini di file style Anda <item name="android:windowDrawsSystemBarBackgrounds">false</item>Jika tidak, pewarnaan bilah sistem tidak akan berfungsi.
Alexey Ozerov
70

Inilah cara melakukannya secara terprogram:

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

Menggunakan perpustakaan Compat:

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

Inilah cara melakukannya dengan xml di folder values-v21 / style.xml:

<item name="android:navigationBarColor">@color/your_color</item>
Bolling
sumber
1
Ini pilihan aneh! Saya memiliki aplikasi yang membuat navbar hitam dengan tombol hitam sehingga tidak mungkin untuk melihat tombol lunak home / back / baru-baru ini ...
JohnyTex
37

Berikut adalah beberapa cara untuk mengubah warna Bilah Navigasi.

Dengan XML

1- values-v21 / style.xml

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

Atau jika Anda ingin melakukannya hanya menggunakan nilai / folder maka-

2- values ​​/ style.xml

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

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

Anda juga dapat mengubah warna bilah navigasi Dengan Memprogram .

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

Dengan Menggunakan Compat Library-

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

silakan temukan tautan untuk detail lebih lanjut- http://developer.android.com/reference/android/view/Window.html#setNavigationBarColor(int)

D_Alpha
sumber
Saya tidak dapat menggunakan tools:targetApi? Apakah fungsi ini sudah usang?
winklerrr
1
@winklerrr Ini tidak ketinggalan zaman, lihat jawaban saya yang diperbarui.
D_Alpha
Jika saya memutuskan untuk mengubah warna secara terprogram - apakah saya harus melakukan ini di masing-masing Activity/ Fragment? Atau ada tempat tertentu di mana saya harus melakukannya? Mungkin di kelas yang meluas Application?
winklerrr
1
Anda perlu melakukan ini di setiap Aktivitas atau Anda dapat membuat gaya yang berbeda untuk aktivitas yang berbeda.
D_Alpha
Tidak perlu styles.xmltools:targetApi
diganti
8

Anda dapat menambahkan baris berikut di folder values-v21 / style.xml :

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

Anda juga dapat memodifikasi tema menggunakan Editor tema dengan mengeklik:

Alat -> Android -> Editor Tema

Kemudian, Anda bahkan tidak perlu memasukkan beberapa konten tambahan ke file .xml atau .class Anda.

Lelouch
sumber
Tip yang bagus! Bagi saya itu hanya di bawah Tools -> Theme Editor.
Sam
Sekarang Theme Editor hilang mulai dengan 3.3.
Jenix
1
  1. Buat Warna Hitam: <color name="blackColorPrimary">#000001</color> (not #000000)
  2. Tulis dalam Gaya: <item name="android:navigationBarColor" tools:targetApi="lollipop">@color/blackColorPrimary</item>

Masalahnya adalah bahwa versi Android yang lebih tinggi membuat trasparent untuk # 000000

Fariz Agayev
sumber
0

Anda dapat mengubahnya secara langsung di file styles.xml \ app \ src \ main \ res \ values ​​\ styles.xml

Ini berfungsi pada versi yang lebih lama, saya mengubahnya di KitKat dan datang ke sini.

Dawid Polakowski
sumber