wake-up-neo.com

Android-Statusleisten-Symbolfarbe

Ich habe mich gefragt, ob es möglich ist, die Farbe der Statusleiste icons zu ändern (nicht die Farbe der Statusleiste, colorPrimaryDark) enter image description hereNehmen wir an, ich möchte diese Statusleiste mit:
<item name="colorPrimaryDark">@Android:color/white</item> 

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

Vielen Dank.

EDIT:

Neu in der M-Entwicklervorschau: windowLightStatusBar. Umdrehen auf in Ihrem Design weist das System an, einen dunklen Vordergrund zu verwenden, der für .__ nützlich ist. hellere Statusleisten. Beachten Sie, dass die M-Vorschau einen Fehler aufweist Die Benachrichtigungssymbole bleiben weiß, während die Systemstatussymbole richtig auf halbtransparentes Schwarz umstellen.

von: Roman Nurik Google+ post enter image description here

85
GuilhE

Nicht seit Lollipop. Beginnend mit Android 5.0 sagen die Richtlinien:

Benachrichtigungssymbole müssen vollständig weiß sein.

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

Workaround

Die einzige Möglichkeit, ein farbiges Symbol auf Lollipop zu haben, besteht darin, Ihre targetSdkVersion auf die Werte <21 zu senken, aber ich denke, 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 Methode DrawableCompat.setTint aus der neuen v4-Support-Bibliothek verwenden.

23
Kuba Spatny

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

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

 enter image description here

138
eOnOe

@eOnOe hat geantwortet, wie wir den Statusbalkenfarbton durch 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);
    }
}
57
ywwynm

wenn Sie einen API-Level kleiner als 23 haben, müssen Sie ihn auf diese Weise verwenden. Es hat für mich funktioniert, erklären Sie dies unter v21/style.

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

Die Einstellung von windowLightStatusBar auf true funktioniert nicht bei Mi-Telefonen, einigen Meizu-Telefonen, Blackview-Telefonen, WileyFox usw. Ich habe solchen Hack für Mi- und Meizu-Geräte gefunden. Dies ist keine umfassende Lösung dieses Leistungsproblems, aber vielleicht wäre es für jemanden nützlich.

Und ich denke, es wäre besser, wenn Sie Ihren Kunden sagen, dass die Statusleiste zum Färben (zum Beispiel) weiß ist - keine gute Idee. Anstatt verschiedene Hacks zu verwenden, ist es besser, entsprechend den Richtlinien eine geeignete colorPrimaryDark zu definieren

4
Jackky777

Ja, du kannst 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);
0
hadi seylani