574 Stimmen

Wie ändert man die Farbe der Statusleiste in Android?

Zunächst einmal handelt es sich nicht um ein Duplikat wie unter Wie ändere ich die Hintergrundfarbe der Android-Statusleiste

Wie kann ich die Farbe der Statusleiste ändern, die dieselbe sein sollte wie in der Navigationsleiste.

Ich möchte, dass die Farbe der Statusleiste der Farbe der Navigationsleiste entspricht

Bildbeschreibung hier eingeben

50voto

itzhar Punkte 12059

Dies ist ein sehr einfacher Weg, um dies ohne jede Bibliothek zu tun: Wenn die Betriebssystemversion nicht unterstützt wird - unter KitKat - passiert nichts. Ich mache folgende Schritte:

  1. In meinem XML habe ich ganz oben diese Ansicht hinzugefügt:

Dann habe ich diese Methode erstellt:

 public void setStatusBarColor(View statusBar, int color){
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
           Window w = getWindow();
           w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
           // Statusleisten-Höhe
           int actionBarHeight = getActionBarHeight();
           int statusBarHeight = getStatusBarHeight();
           // Aktionsleisten-Höhe
           statusBar.getLayoutParams().height = actionBarHeight + statusBarHeight;
           statusBar.setBackgroundColor(color);
     }
}

Du benötigst auch diese beiden Methoden, um die Höhe der Aktionsleiste & Statusleiste zu erhalten:

public int getActionBarHeight() {
    int actionBarHeight = 0;
    TypedValue tv = new TypedValue();
    if (getTheme().resolveAttribute(android.R.attr.actionBarSize, tv, true))
    {
       actionBarHeight = TypedValue.complexToDimensionPixelSize(tv.data, getResources().getDisplayMetrics());
    }
    return actionBarHeight;
}

public int getStatusBarHeight() {
    int result = 0;
    int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
    if (resourceId > 0) {
        result = getResources().getDimensionPixelSize(resourceId);
    }
    return result;
}

Dann ist das Einzige, was du brauchst, diese Zeile, um die Farbe der Statusleiste festzulegen:

setStatusBarColor(findViewById(R.id.statusBarBackground), getResources().getColor(android.R.color.white));

41voto

Amin Keshavarzian Punkte 3051

Um die Farbe für den obigen Lolipop zu ändern, fügen Sie dies einfach zu Ihrer styles.xml hinzu

@color/statusBarColor

Aber denken Sie daran, wenn Sie eine helle Farbe für die Statusleiste haben möchten, fügen Sie auch diese Zeile hinzu

true

32voto

Moti Bartov Punkte 3114

Nun, Izhar's Lösung war in Ordnung, aber persönlich versuche ich, Code zu vermeiden, der so aussieht:

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//Führe die Aktionen für diese SDK-Version durch
};

Aber ich mag es auch nicht, Code zu duplizieren. In deiner Antwort muss ich eine Zeile Code wie unten in allen Activities hinzufügen:

setStatusBarColor(findViewById(R.id.statusBarHintergrund), getResources().getColor(android.R.color.weiss));

Also habe ich Izhar's Lösung übernommen und XML verwendet, um das gleiche Ergebnis zu erzielen: Erstelle ein Layout für die StatusBar status_bar.xml

Beachte die attribute für Höhe und Erhebung, diese werden weiter unten in Werten, Werten-v19, Werten-v21 festgelegt.

Füge dieses Layout deinem Activity-Layout mit include hinzu, main_activity.xml:

//Der Rest deines Layouts       

Für die Toolbar füge das attribute für den oberen Rand hinzu:

In deiner AppTheme style-v19.xml und styles-v21.xml füge das windowTranslucent-Attribut hinzu:

styles-v19.xml, v21:

true

Und schließlich füge in deinen dimens, dimens-v19, dimens-v21 die Werte für den Toolbar-oberen Rand und die Höhe der StatusBar-Höhe hinzu: dimens.xml für weniger als KitKat:

4dp
0dp
0dp

Die Höhe der Statusleiste beträgt immer 24dp dimens-v19.xml für KitKat und höher:

24dp
24dp

dimens-v21.xml für Lolipop, füge nur die Erhebung hinzu, wenn benötigt:

4dp

Dies ist das Ergebnis für Jelly Bean, KitKat und Lollipop:

Bildbeschreibung

26voto

lcompare Punkte 898

Erstellen Sie einfach ein neues Thema in res/values/styles.xml, in dem Sie "colorPrimaryDark" ändern, das die Farbe der Statusleiste ist:

    <item name="colorPrimaryDark">@color/colorGray</item>

Und ändern Sie das Aktivitätsthema in der Datei AndroidManifest.xml auf das gewünschte Thema. In der nächsten Aktivität können Sie die Farbe wieder auf die Originalfarbe ändern, indem Sie das ursprüngliche Thema auswählen:

So sollte Ihre Datei res/values/colors.xml aussehen:

    #3F51B5
    #303F9F
    #c6d6f0
    #757575

20voto

sajad abbasi Punkte 1792

Sie können die Farbe der Statusleiste mit dieser Funktion ändern. Funktioniert auf Android L bedeutet API 21 und höher und benötigt einen Farbstring wie "#ffffff".

private void changeStatusBarColor(String color){
    if (Build.VERSION.SDK_INT >= 21) {
        Window window = getWindow();
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.setStatusBarColor(Color.parseColor(color));
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X