Farbe der Android-Statusleistensymbole

130

Ich frage mich , ob es möglich ist, die Statusbar ändern Symbole Farbe ( nicht die Statusbar Farbe, colorPrimaryDark) Geben Sie hier die Bildbeschreibung ein Sagen wir , ich dieses statusbar wollen mit:
<item name="colorPrimaryDark">@android:color/white</item>

und die Symbole in Schwarz, ist es möglich?

Vielen Dank.

BEARBEITEN:

Neu in der M-Entwicklervorschau: windowLightStatusBar. Wenn Sie dies in Ihrem Thema aktivieren, wird das System angewiesen, einen dunklen Vordergrund zu verwenden, der für hellere Statusleisten nützlich ist. Beachten Sie, dass die M-Vorschau einen Fehler aufweist, bei dem Benachrichtigungssymbole weiß bleiben, während sich die Systemstatussymbole korrekt in halbtransparentes Schwarz ändern.

von: Roman Nurik Google+ Beitrag Geben Sie hier die Bildbeschreibung ein

GuilhE
quelle

Antworten:

24

Nicht seit Lollipop. Ab Android 5.0 lauten die Richtlinien:

Benachrichtigungssymbole müssen vollständig weiß sein.

Selbst wenn dies nicht der Fall ist, berücksichtigt das System nur den Alphakanal Ihres Symbols und macht sie weiß

Problemumgehung

Die einzige Möglichkeit, ein farbiges Symbol auf Lollipop zu haben, besteht darin targetSdkVersion, die Werte zu senken. <21Ich denke jedoch, Sie sollten die Richtlinien besser befolgen und nur weiße Symbole verwenden.

Wenn Sie sich dennoch für farbige Symbole entscheiden, können Sie die DrawableCompat.setTint- Methode aus der neuen v4-Unterstützungsbibliothek verwenden.

Kuba Spatny
quelle
3
Ich habe eine Google-Suche durchgeführt und konnte keinen richtigen Weg finden, aber wenn die Android-Richtlinien besagen, dass Symbole weiß sein müssen, ist es weiß :) Danke!
GuilhE
11
Dafür muss es eine bessere Lösung geben. Mehrere kommerzielle Apps verwenden Farben. Dies ist ein schrecklich idiotischer Design-Schachzug von Google. Was dachten sie wieder, wenn überhaupt?
not2qubit
Wenn Sie sich Googles Nachrichten-App ansehen, haben sie keine weißen Statusleistensymbole: play.google.com/store/apps/…
Adam Hurwitz
6
<item name="android:windowLightStatusBar">true</item>arbeitete für mich.
Adam Hurwitz
Ich frage mich, warum die Google Mail-App (veröffentlicht in 2019-04) die Statusleiste weiß und die Symbole / den Text dunkelgrau färbt.
Daniel F
200

Ja, es ist möglich, es in Grau zu ändern (keine benutzerdefinierten Farben), aber dies funktioniert nur ab API 23 und höher. Sie müssen dies nur in Ihre values-v23 / styles.xml einfügen

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

Geben Sie hier die Bildbeschreibung ein

eOnOe
quelle
2
Aber die Farbe der Menüpunktsymbole ist immer noch weiß. Wie kann man die Farbe der Menüpunktsymbole in Schwarz ändern?
Mateen Chaudhry
107

@eOnOe hat geantwortet, wie wir den Farbton der Statusleiste über XML ändern können. Wir können es aber auch dynamisch im Code ändern:

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
quelle
Schöne Lösung! Es war wirklich für meine Anwendung geeignet, da ich die SDK-Version nicht ändern musste.
Vitor Braga
2
es ist korrekter: decorView.setSystemUiVisibility (decorView.getSystemUiVisibility () | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
Anton Savenok
Das hat mir den Tag gerettet! Vielen Dank, dass Sie @ywwynm!
ReGaSLZR
Dies ist die beste Lösung, funktioniert auch auf MI-Telefonen. Du bist ein Retter!
Numanqmr
Was ist ShouldChangeStatusBarTintDark bitte?
Ibramazin
48

Wenn Sie eine API-Stufe kleiner als 23 haben, müssen Sie diese auf diese Weise verwenden. es hat bei mir funktioniert deklariere dies unter v21 / style .

<item name="colorPrimaryDark" tools:targetApi="23">@color/colorPrimary</item>
        <item name="android:windowLightStatusBar" tools:targetApi="23">true</item>
Ritesh
quelle
1
Du meinst 23. :(
meditat
Nein, ich meinte v21 / Style, wenn Sie nichts davon wissen, dann besuchen Sie bitte diesen Link. stackoverflow.com/questions/28465064/creating-styles-v21-xml
Ritesh
Selbst wenn es in einer styles.xml mit dem Qualifikationsmerkmal v21 platziert wird, funktioniert dies nur auf Geräten, auf denen API 23 und höher ausgeführt wird. Tatsächlich hebt AS Lint diese Elemente mit einer Warnung hervor, die besagt, dass sie in Android-Versionen, die sie nicht unterstützen, ignoriert werden. Der tools:targetApi="23"Teil weist Lint an, diese Warnung zu unterdrücken.
Subaru Tashiro
5

Einstellen windowLightStatusBarauf truenicht arbeitet mit Mi - Telefone, einige Meizu Handys, Blackview Telefone, WileyFox etc. Ich habe festgestellt , so Hack für Mi und Meizu Geräte. Dies ist keine umfassende Lösung für dieses Leistungsproblem, aber vielleicht wäre es für jemanden nützlich.

Und ich denke, es wäre besser, Ihrem Kunden zu sagen, dass das Färben der Statusleiste (zum Beispiel) Weiß keine gute Idee ist. Anstatt verschiedene Hacks zu verwenden, ist es besser, entsprechend colorPrimaryDarkden Richtlinien angemessen zu definieren

Jackky777
quelle
-3

Ja, Sie können es ändern. aber in API 22 und höher mit NotificationCompat.Builder und 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
quelle
Bist du sicher? In der Dokumentation heißt es: "Wenn festgelegt, wird die mit setColor (int) festgelegte Farbe als Hintergrundfarbe für diese Benachrichtigung verwendet." und "Bei den meisten Stilen wird die Farbgebung nur angewendet, wenn die Benachrichtigung für eine Vordergrunddienstbenachrichtigung bestimmt ist." Es scheint nicht möglich zu sein, die Vordergrundfarbe des Symbols zu ändern.
Dominique
Dies gilt nur für Vordergrundbenachrichtigungen und gilt nur für das Benachrichtigungselement - nicht für das Benachrichtigungssymbol.
Subaru Tashiro