Wie kann ich die Statusleiste mit schwarzen Symbolen weiß machen?


83

Ich möchte die Farbe der Statusleiste für meine App so ändern, dass sie weiß mit schwarzen Symbolen ist (anstelle des Standardschwarzes mit weißen Symbolen). Gibt es eine Möglichkeit, dies zu tun?


Ändern Sie Ihr Standardthema
Rohit5k2

In welches Thema soll ich es ändern, damit die Benachrichtigungsleistensymbole schwarz werden?
Jon

Verwenden Sie ein benutzerdefiniertes Thema. Zu Beginn siehe stackoverflow.com/questions/8024706/…
Rohit5k2

Was ist also mit Apps, die den Android-Richtlinien folgen und weiße Benachrichtigungssymbole haben? Wie erwarten Sie, dass der Benutzer sie sieht, wenn sie sich in Ihrer App befinden?
Tyczj

2
Aber Sie können die Farbe anderer Apps-Ressourcen nicht ändern. Tatsächlich macht Lollipop alle Symbole weiß, egal was
passiert

Antworten:


126

Mit Android M (API Level 23) können Sie dies vom Thema mit android:windowLightStatusBarAttribut erreichen.

Bearbeiten:

Wie Pdroid erwähnt hat, kann dies auch programmatisch erreicht werden:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); 

2
kann ich es programmgesteuert einstellen?
Busylee

@busylee Ich denke, Sie können ein Kind Ihres Themas erstellen und es dort ändern und mit activity.getTheme.setTo (Thema ein anderes)
anwenden

Hallo @wrecker, ich habe das gleiche Problem mit meinem Anwendungsbenachrichtigungssymbol. Ich habe android hinzugefügt: windowLightStatusBar = true in meinem Thema und ich teste es in Android M. Das weiße Benachrichtigungssymbol ändert sich jedoch nicht in grau, wenn ich das Thema mit einer Launcher-Anwendung eines Drittanbieters (Nova Launcher) ändere. Ich habe alle möglichen Möglichkeiten ausprobiert, konnte es aber noch nicht beheben. Wenn Sie mir helfen können, wird es dankbar sein.
Sujit

1
@busylee Ja, Sie können es jederzeit mit der folgenden Methode festlegen: View.setSystemUiVisibility (View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); Es sollte zur Antwort hinzugefügt werden
Pdroid

6
Was ist, wenn ich in 22 oder früheren Versionen verwenden möchte?
Dhara Patel

45

Es ist möglich, die weiße Statusleiste mit grauen Symbolen zu erstellen, z. B. auf diese Weise für SDK> = 23 (siehe Dokumentation ):

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="android:windowLightStatusBar">true</item>
</style>

in Ihrer styles.xml und setzen Sie die colorPrimaryauf weiß oder programmgesteuert:

getWindow().setStatusBarColor(Color.WHITE);

2
Es wurde in API 23 hinzugefügt, nicht in 21 - siehe Dokumente
Vadim Kotov

hey @VadimKotov eigentlich habe ich geschrieben, SDK >= 23aber @being_sohelkhan hat aus irgendeinem Grund meine ursprüngliche Antwort bearbeitet ... stackoverflow.com/posts/46897243/revisions
Rammgarot

15

Gerade zu meiner Aktivität auf Kotlin hinzugefügt:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                window.decorView.systemUiVisibility =View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
                window.statusBarColor = Color.WHITE
            }

7

Fügen Sie dies einfach Ihrem Stil hinzu

<item name="android:windowDrawsSystemBarBackgrounds">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>

setze android: windowDrawsSystemBarBackgrounds auf true * . Dies ist eine Flagge, deren Beschreibung unten angegeben ist:

Flag, das angibt, ob dieses Fenster für das Zeichnen des Hintergrunds für die Systemleisten verantwortlich ist. Wenn true und das Fenster nicht schwebt, werden die Systemleisten mit einem transparenten Hintergrund gezeichnet und die entsprechenden Bereiche in diesem Fenster werden mit den in {@link android.R.attr # statusBarColor} und {@link android.R angegebenen Farben gefüllt .attr # navigationBarColor}. Entspricht {@link android.view.WindowManager.LayoutParams # FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS}.


1

Sie können es auf diese Weise in Kotlin verwenden

 window.decorView.systemUiVisibility = View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR

Stellen Sie sicher, dass Sie es onCreate()vorher anrufensetContentView()


0

Dies ist nur möglich, wenn Sie die Kontrolle über das gesamte ROM haben, um dies manuell anzupassen. Ich empfehle Ihnen, eine hellgraue Farbe für die Farbe der Statusleiste in Ihrem Thema zu verwenden, wie dies beim Google Drive der Fall ist.

Bearbeiten: Bitte beziehen Sie sich auf @Wrekcker Antwort, da sich dies in Android M geändert hat.


1
Es wird in Android M
Amir Dora unterstützt.

-1

Ich hatte das gleiche Problem.

Mir ist aufgefallen, dass ein normales Layout wie RelativeLayout nicht funktioniert. Aber als ich zu dieser Support-Bibliothek wie CordinatorLayout wechselte, hat es endlich angefangen zu funktionieren. Versuche dies.

  <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        tools:context=".Activities.Activity">


        <android.support.v7.widget.Toolbar
            android:id="@+id/tb_activity"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/AppTheme.PopupOverlay" />


    </android.support.design.widget.CoordinatorLayout>

<********* UNTER ANDEREN ATTRIBUTEN ************>

Stile

<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <!-- Customize your theme here. -->
    <item name="colorPrimary">@color/colorPrimary</item>
    <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    <item name="colorAccent">@color/colorAccent</item>
</style>

<style name="AppTheme.NoActionBar" parent="AppTheme">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

<style name="AppTheme.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />

<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />

Und im Manifest

<activity
            android:name=".Activities.MyActivity"
            android:label="Activity"
            android:theme="@style/AppTheme.NoActionBar">
        </activity>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.