Android durum çubuğu simgelerinin rengi


131

Durum çubuğu simgelerinin rengini değiştirmenin mümkün olup olmadığını merak ediyordum ( durum çubuğu rengini değilcolorPrimaryDark ) görüntü açıklamasını buraya girin Diyelim ki bu durum çubuğunu istiyorum:
<item name="colorPrimaryDark">@android:color/white</item>

ve siyah ikonlar, mümkün mü?

Teşekkürler.

DÜZENLE:

M geliştirici önizlemesindeki yenilik: windowLightStatusBar. Bunu temanızda çevirmek, sisteme daha açık renkli durum çubukları için yararlı olan koyu bir ön plan kullanmasını söyler. M önizlemesinin, bildirim simgelerinin beyaz kaldığı, sistem durumu simgelerinin ise yarı saydam siyaha dönüştüğü bir hataya sahip olduğunu unutmayın.

from: Roman Nurik Google+ yayını görüntü açıklamasını buraya girin

Yanıtlar:


24

Lollipop'tan beri değil. Android 5.0'dan başlayarak, yönergeler şunları söylüyor:

Bildirim simgeleri tamamen beyaz olmalıdır.

Olmasalar bile, sistem yalnızca simgenizin alfa kanalını dikkate alarak onları beyaz hale getirecektir.

Geçici çözüm

Lollipop'ta renkli bir simgeye sahip olmanın tek yolu, targetSdkVersiondeğerlerinizi düşürmektir <21, ancak bence yönergelere uymanız ve yalnızca beyaz simgeleri kullanmanız daha iyi olur.

Yine de renkli simgeler istediğinize karar verirseniz , yeni v4 destek kitaplığından DrawableCompat.setTint yöntemini kullanabilirsiniz .


3
Biraz google araması yaptım ve buna uygun bir yol bulamadım ancak Android yönergeleri simgelerin beyaz olması gerektiğini söylüyorsa, beyazdır :) Teşekkürler!
Guilhe

11
Bunun için daha iyi bir çözüm olmalı. Piyasadaki birkaç ticari uygulama renkleri kullanıyor. Bu, Google'ın korkunç derecede aptalca bir tasarım hamlesidir. Yine ne düşünüyorlardı?
not2qubit

Google'ın haber uygulamasına bakarsanız, beyaz durum çubuğu simgeleri yoktur: play.google.com/store/apps/…
Adam Hurwitz

6
<item name="android:windowLightStatusBar">true</item>benim için çalıştı.
Adam Hurwitz

Gmail Uygulamasının (2019-04'te piyasaya sürüldüğü gibi) neden durum çubuğunu beyaza ve simgeleri / metni koyu griye boyadığını merak ediyorum.
Daniel F

201

Evet, griye çevirmek mümkündür (özel renkler yoktur), ancak bu yalnızca API 23 ve üzeri sürümlerde çalışır, bunu yalnızca değerlerinize eklemeniz gerekir-v23 / styles.xml

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

görüntü açıklamasını buraya girin


2
ancak menü öğelerinin simgelerinin rengi hala beyazdır, menü öğesi simgelerinin rengi siyaha nasıl değiştirilir?
Mateen Chaudhry

107

@eOnOe, xml aracılığıyla durum çubuğu renk tonunu nasıl değiştirebileceğimizi yanıtladı. Ancak bunu kodda dinamik olarak da değiştirebiliriz:

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);
    }
}

Güzel çözüm! Uygulamam için gerçekten uygundu çünkü SDK sürümünü değiştirmek zorunda değildim.
Vitor Braga

2
daha doğrudur: decorView.setSystemUiVisibility (decorView.getSystemUiVisibility () | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
Anton Savenok

Bu benim günümü kurtardı! Teşekkür ederim @ywwynm!
ReGaSLZR

Bu en iyi çözümdür ve MI telefonlarında da işe yarar. Sen bir kurtarıcısın!
Numanqmr

ShouldChangeStatusBarTintDark nedir lütfen?
Ibramazin

48

API düzeyiniz 23'ten küçükse, bu şekilde kullanmanız gerekir. benim için çalıştı bunu altında beyan et v21 / style ediyorum .

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

1
23 demek
istiyorsun

Hayır, bunu bilmiyorsanız v21 / Style'ı kastetmiştim, lütfen bu bağlantıyı ziyaret edin. stackoverflow.com/questions/28465064/creating-styles-v21-xml
Ritesh

V21 niteleyicisine sahip bir styles.xml dosyasına yerleştirilse bile, bu yalnızca api 23 ve üzeri çalıştıran cihazlarda çalışır. Aslında AS Lint, desteklemeyen android sürümlerinde göz ardı edileceğini söyleyen bir uyarı ile bu öğeleri vurgular. tools:targetApi="23"Bölüm bu uyarıyı bastırmak için Lint söyler.
Subaru Tashiro

5

Ayar windowLightStatusBariçin truedeğil vs. Ben ettik bulundu WileyFox Mi telefonları, bazı Meizu telefonlar, Blackview telefonları ile çalışır böyle kesmek Mi ve Meizu cihazlar için. Bu, bu performans sorununun kapsamlı bir çözümü değil, ama belki birisi için faydalı olabilir.

Ve bence, müşterinize durum çubuğunu (örneğin) beyaz renklendirmenin iyi bir fikir olmadığını söylemeniz daha iyi olur. farklı hackler kullanmak yerine colorPrimaryDark, kurallara göre uygun olanı tanımlamak daha iyi olacaktır.


-3

Evet değiştirebilirsiniz. ancak api 22 ve üzerinde, NotificationCompat.Builder ve setColorized (true) kullanılarak:

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);

Emin misiniz? Dokümantasyon "Ayarlandığında, setColor (int) ile ayarlanan renk bu bildirimin arka plan rengi olarak kullanılacaktır" diyor. ve "Çoğu stil için, renklendirme yalnızca bildirim bir ön plan hizmet bildirimi içinse uygulanacaktır." Simgenin ön plan rengini değiştirmek mümkün görünmüyor.
Dominique

Bu yalnızca ön plandaki bildirimler içindir ve yalnızca bildirim öğesi için geçerlidir - bildirim simgesi için geçerli değildir.
Subaru Tashiro
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.