Warna ikon bilah status Android


131

Saya bertanya-tanya apakah mungkin mengubah warna ikon statusbar ( bukan warna statusbar, colorPrimaryDark) masukkan deskripsi gambar di sini Katakanlah saya ingin statusbar ini dengan:
<item name="colorPrimaryDark">@android:color/white</item>

dan ikon berwarna hitam, apakah mungkin?

Terima kasih.

EDIT:

Baru di M developer preview: windowLightStatusBar. Membalik ini di tema Anda memberi tahu sistem untuk menggunakan latar depan gelap, berguna untuk bilah status berwarna lebih terang. Perhatikan bahwa pratinjau M tampaknya memiliki bug di mana ikon pemberitahuan tetap putih, sedangkan ikon status sistem dengan benar berubah menjadi hitam semitransparan.

dari: Pos Google+ Roman Nurik masukkan deskripsi gambar di sini

Jawaban:


24

Tidak sejak Lollipop. Dimulai dengan Android 5.0, pedoman mengatakan:

Ikon pemberitahuan harus seluruhnya putih.

Meskipun tidak, sistem hanya akan mempertimbangkan saluran alfa ikon Anda, membuatnya putih

Solusi

Satu-satunya cara untuk memiliki ikon berwarna di Lollipop adalah dengan menurunkan Anda targetSdkVersionke nilai<21 , tetapi saya pikir Anda sebaiknya mengikuti pedoman dan hanya menggunakan ikon putih.

Namun, jika Anda masih memutuskan ingin ikon berwarna, Anda bisa menggunakan metode DrawableCompat.setTint dari pustaka dukungan v4 baru.


3
Saya melakukan beberapa pencarian google dan saya tidak dapat menemukan cara yang tepat untuk ini tetapi jika pedoman Android mengatakan bahwa ikon harus putih, putih itu :) Terima kasih!
GuilhE

11
Pasti ada solusi yang lebih baik untuk ini. Beberapa aplikasi komersial di luar sana menggunakan warna. Ini adalah langkah desain yang sangat konyol oleh Google. Apa yang mereka pikirkan lagi, jika memang ada?
not2qubit

Jika Anda melihat aplikasi berita Google, mereka tidak memiliki ikon bilah status putih: play.google.com/store/apps/…
Adam Hurwitz

6
<item name="android:windowLightStatusBar">true</item>bekerja untuk saya.
Adam Hurwitz

Saya bertanya-tanya mengapa Aplikasi Gmail (seperti dirilis pada 2019-04) mewarnai bilah status putih dan ikon / teks abu-abu tua.
Daniel F

201

Ya, Anda dapat mengubahnya menjadi abu-abu (tidak ada warna khusus) tetapi ini hanya berfungsi dari API 23 dan di atasnya Anda hanya perlu menambahkan ini di values-v23 / styles.xml Anda

<item name="android:windowLightStatusBar">true</item>

masukkan deskripsi gambar di sini


2
tetapi warna ikon item menunya masih putih bagaimana cara mengubah warna ikon item menunya menjadi hitam?
Mateen Chaudhry

107

@eOnOe telah menjawab bagaimana kita dapat mengubah warna bilah status melalui xml. Tapi kita juga bisa mengubahnya secara dinamis dalam kode:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    View decor = getWindow().getDecorView();
    if (shouldChangeStatusBarTintToDark) {
        decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
    } else {
        // We want to change tint color to white again.
        // You can also record the flags in advance so that you can turn UI back completely if
        // you have set other flags before, such as translucent or full screen.
        decor.setSystemUiVisibility(0);
    }
}

Solusi bagus! Ini sangat cocok untuk aplikasi saya karena saya tidak perlu mengubah versi SDK.
Vitor Braga

2
itu lebih benar: decorView.setSystemUiVisibility (decorView.getSystemUiVisibility () | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
Anton Savenok

Ini menyelamatkan hariku! Terima kasih @ywwynm!
ReGaSLZR

Ini adalah solusi terbaik, juga berfungsi pada ponsel MI. Anda seorang penyelamat!
Numanqmr

apa itu ShouldChangeStatusBarTintDark ??
Ibramazin

48

jika Anda memiliki API level lebih kecil dari 23, Anda harus menggunakannya dengan cara ini. itu berhasil untuk saya menyatakan ini di bawah v21 / style .

<item name="colorPrimaryDark" tools:targetApi="23">@color/colorPrimary</item>
        <item name="android:windowLightStatusBar" tools:targetApi="23">true</item>

1
Maksud Anda 23. :(
meditat

Tidak, maksud saya v21 / Style jika Anda tidak tahu tentang itu daripada kunjungi tautan ini. stackoverflow.com/questions/28465064/creating-styles-v21-xml
Ritesh

Meskipun ditempatkan di styles.xml dengan qualifier v21, ini hanya berfungsi pada perangkat yang menjalankan api 23 ke atas. Sebenarnya AS Lint menyoroti item ini dengan peringatan yang mengatakan itu akan diabaikan pada versi Android yang tidak mendukungnya. Bagian tersebut tools:targetApi="23"memberi tahu Lint untuk menyembunyikan peringatan ini.
Subaru Tashiro

5

Pengaturan windowLightStatusBaruntuk truetidak berfungsi dengan ponsel Mi, beberapa ponsel Meizu, ponsel Blackview, WileyFox, dll. Saya telah menemukan peretasan semacam itu untuk perangkat Mi dan Meizu. Ini bukanlah solusi komprehensif dari masalah kinerja ini, tapi mungkin akan berguna bagi seseorang.

Dan menurut saya, akan lebih baik untuk memberi tahu pelanggan Anda bahwa mewarnai bilah status (misalnya) putih - bukanlah ide yang bagus. daripada menggunakan peretasan yang berbeda, akan lebih baik untuk menentukan yang sesuai colorPrimaryDarksesuai dengan pedoman


-3

Ya, Anda bisa mengubahnya. tetapi dalam api 22 dan lebih tinggi, menggunakan NotificationCompat.Builder dan setColorized (true):

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, context.getPackageName())
                .setContentTitle(title)
                .setContentText(message)
                .setSmallIcon(icon, level)
                .setLargeIcon(largeIcon)
                .setContentIntent(intent)
                .setColorized(true)
                .setDefaults(0)
                .setCategory(Notification.CATEGORY_SERVICE)
                .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
                .setPriority(NotificationCompat.PRIORITY_HIGH);

Apa kamu yakin Dokumentasinya mengatakan "Jika disetel, warna yang disetel dengan setColor (int) akan digunakan sebagai warna latar belakang notifikasi ini". dan "Untuk sebagian besar gaya, pewarnaan hanya akan diterapkan jika notifikasi ditujukan untuk notifikasi layanan latar depan." Tampaknya tidak mungkin mengubah warna latar depan ikon.
Dominique

Ini hanya untuk notifikasi latar depan dan hanya berlaku untuk item notifikasi - bukan ikon notifikasi.
Subaru Tashiro
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.