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

GuilhE
sumber

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.

Kuba Spatny
sumber
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

eOnOe
sumber
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);
    }
}
ywwynm
sumber
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>
Ritesh
sumber
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

Jackky777
sumber
-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);
hadi seylani
sumber
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