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>

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.


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>

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)


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>

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.


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


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.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.