Wie ändere ich die Farbe der Statusleiste in Android?

427

Erstens ist es kein Duplikat wie in So ändern Sie die Hintergrundfarbe der Android-Statusleiste

Wie ändere ich die Farbe der Statusleiste, die mit der in der Navigationsleiste übereinstimmen soll?

Ich möchte, dass die Farbe der Statusleiste mit der Farbe der Navigationsleiste übereinstimmt

Geben Sie hier die Bildbeschreibung ein

Codercat
quelle
2
es ist nur nach kitkat @MarkBuikema
codercat
4
Wie Niels vorschlägt, gibt es seit Version 21 ein THEMENATTRIBUT android:statusBarColor. Sie können es einfach hinzufügen values-v21/styles.xml.
Levite
@ MarkBuikema Wie hängt das überhaupt mit dem Root-Zugriff zusammen?
Steve Moretz

Antworten:

623

Android 5.0 Lollipop hat das Material Design-Thema eingeführt, das die Statusleiste basierend auf dem colorPrimaryDarkWert des Themas automatisch einfärbt .

Dies wird auf dem Geräte-Pre-Lollipop dank der Bibliothek support-v7-appcompat ab Version 21 unterstützt. Blogpost über den Support appcompat v21 von Chris Banes

Geben Sie hier die Bildbeschreibung ein

Weitere Informationen zum Materialthema finden Sie auf der offiziellen Website der Android-Entwickler

Giorgio
quelle
29
Aus irgendeinem Grund funktioniert das colorPrimaryDark-Attribut bei mir nicht. Emulator v21 ausprobiert
abweichend
3
Es funktioniert, Sie müssen die Änderungen auf dem Emulator nicht in der Layout-Vorschau sehen [es wird dort nicht
angezeigt
6
colorPrimaryDark funktioniert bei mir auch nicht auf einem API 18-Emulator. Aus dem Artikel über Appcompat: "Auf älteren Plattformen emuliert AppCompat das Farbthema nach Möglichkeit. Derzeit beschränkt sich dies auf das Färben der Aktionsleiste und einiger Widgets."
Adam Johns
12
Was ist mit dem Ändern der Schriftfarbe in der Statusleiste? Die Dokumente sagen nichts darüber.
Scott Biggs
Ich habe es genauso versucht. es funktioniert perfekt in den meisten Geräten, aber ich habe Samsung Galaxy S4 mit OS 5.0.1 und in dieser Telefon Statusleiste Farbe ist schwarz. Und sobald ich zu einer anderen Aktivität gehe und zur vorherigen Aktivität zurückkehre, wird meine Statusleistenfarbe in die Farbe des App-Themas geändert. Jeder Grund, warum dies geschieht
Hitesh Kamani
364

Aktualisieren:

Lutscher:

public abstract void setStatusBarColor (int color)

Hinzugefügt in API Level 21

Android Lollipop brachte die Möglichkeit mit sich, die Farbe der Statusleiste in Ihrer App zu ändern, um eine umfassendere Benutzererfahrung zu erzielen und mit der von Google übereinzustimmen Material Design Guidelines.

So können Sie die Farbe der Statusleiste mit der in eingeführten neuen window.setStatusBarColorMethode ändern API level 21.

Zum Ändern der Farbe der Statusleiste müssen außerdem zwei zusätzliche Flags im Fenster gesetzt werden. Sie müssen die FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDSFlagge hinzufügen und die Flagge löschen FLAG_TRANSLUCENT_STATUS.

Arbeitscode:

import android.view.Window;

...

Window window = activity.getWindow();

// clear FLAG_TRANSLUCENT_STATUS flag:
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

// add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

// finally change the color
window.setStatusBarColor(ContextCompat.getColor(activity,R.color.my_statusbar_color));

Offizielle Entwicklerreferenz: setStatusBarColor (int)

Beispiel: Materialdesign überall

Chris Banes Blog-Appcompat v21: Materialdesign für Pre-Lollipop-Geräte!

Geben Sie hier die Bildbeschreibung ein

Der transitionNameHintergrund für die Ansicht wird sein android:status:background.

Codercat
quelle
2
Irgendeine Lösung für Abwärtskompatibilität?
Adam Hurwitz
Wie in der Antwort von Niels erwähnt: Sie können die Farbe der Statusleiste auch über Thema / Stil konfigurieren, indem Sie android:statusBarColorin Ihrer values-v21/styles.xmlDatei per androiddocs.com/training/material/theme.html wie folgt festlegen<item name="android:statusBarColor">@color/primary_color</item>
JL West
4
Ich kann die Farbe der Statusleiste in Weiß ändern, aber ich kann das Benachrichtigungssymbol wie "Batterie" nicht sehen. Wie kann ich das lösen?
MNFS
1
Sie haben keine Ahnung, wie sehr Sie mir gerade geholfen haben.
Abhishek Dhyani
220

Platzieren Sie dies als Ihre Werte-v21 / styles.xml, um dies auf Lollipop zu aktivieren:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryDark">@color/color_secondary</item>
        <item name="colorAccent">@color/color_accent</item>
        <item name="android:statusBarColor">@color/color_primary</item>
    </style>
</resources>
Niels
quelle
34
Dies erfordert min API 21
Roman
49
Dies ist wahrscheinlich der Grund, warum er vorgeschlagen hat, es in values-v21 / styles.xml zu setzen ;-) Scheint die bisher genaueste Antwort zu sein !!
Levite
Aber das warnt immer noch vor einer Warnung !!?
Nihal Sharma
Was ist die Funktion für kompatibel? Statusleiste
blackHawk
Sie können targeApiAttribute hinzufügen , wenn Sie eine einzelne Stildatei verwalten möchten. Lesen Sie meine Antwort als Referenz stackoverflow.com/a/48565459/4291272
Faisal Shaikh
50

Dies ist eine sehr einfache Möglichkeit, dies ohne Bibliothek zu tun: Wenn die Betriebssystemversion unter Kitkat nicht unterstützt wird, ist nichts passiert. Ich mache diese Schritte:

  1. In meiner XML habe ich oben diese Ansicht hinzugefügt:
<View
        android:id="@+id/statusBarBackground"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />

dann habe ich diese Methode gemacht:

 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);
           //status bar height
           int actionBarHeight = getActionBarHeight();
           int statusBarHeight = getStatusBarHeight();
           //action bar height
           statusBar.getLayoutParams().height = actionBarHeight + statusBarHeight;
           statusBar.setBackgroundColor(color);
     }
}

Außerdem benötigen Sie beide Methoden, um die Höhe der Aktionsleiste und der Statusleiste zu ermitteln:

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 brauchen Sie nur noch diese Zeile, um die Farbe der Statusleiste festzulegen:

setStatusBarColor(findViewById(R.id.statusBarBackground),getResources().getColor(android.R.color.white));
itzhar
quelle
1
Wo soll ich das Ansichtselement platzieren? sollte es über dem Hauptlayout sein?
Emil Reña Enriquez
Ja. In deiner XML. Oben drauf.
Itzhar
Achtung: Funktioniert nur für Android> = 19 API. In meinem Fall brauche ich Unterstützung ab 16
Anton Kizema
setStatusBarColor (findViewById (android.R.id.statusBarBackground), getResources (). getColor (android.R.color.white));
AndroidLad
34

Wie @Niels sagte, müssen Sie in values-v21 / styles.xml platzieren:

<item name="android:statusBarColor">@color/black</item>

Aber fügen tools:targetApi="lollipop"Sie hinzu, wenn Sie einzelne styles.xml möchten, wie:

<item name="android:statusBarColor" tools:targetApi="lollipop">@color/black</item>
Faisal Shaikh
quelle
3
Vielen Dank für "targetApi". Ich mag es nicht, wenn mein Thema auf mehrere Dateien verteilt ist. :)
Plexus
31

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

 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
//Do what you need for this SDK
};

Außerdem möchte ich auch keinen Code duplizieren. In Ihrer Antwort muss ich in allen Aktivitäten eine solche Codezeile hinzufügen:

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

Also nahm ich die Izhar-Lösung und verwendete XML, um das gleiche Ergebnis zu erzielen: Erstellen Sie ein Layout für die StatusBar status_bar.xml

<View xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="@dimen/statusBarHeight"
     android:background="@color/primaryColorDark"
     android:elevation="@dimen/statusBarElevation">

Beachten Sie die Höhen- und Höhenattribute. Diese werden in den Werten "Werte-v19" und "Werte-v21" weiter unten festgelegt.

Fügen Sie dieses Layout Ihrem Aktivitätenlayout hinzu, indem Sie include, main_activity.xml, verwenden:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/Black" >

<include layout="@layout/status_bar"/>
<include android:id="@+id/app_bar" layout="@layout/app_bar"/>
//The rest of your layout       
</RelativeLayout>

Fügen Sie für die Symbolleiste das Attribut "Oberer Rand" hinzu:

<android.support.v7.widget.Toolbar xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="?android:attr/actionBarSize"
android:background="@color/primaryColor"
app:theme="@style/MyCustomToolBarTheme"
app:popupTheme="@style/ThemeOverlay.AppCompat.Dark"
android:elevation="@dimen/toolbarElevation"
android:layout_marginTop="@dimen/appBarTopMargin"
android:textDirection="ltr"
android:layoutDirection="ltr">

Fügen Sie in Ihren appTheme style-v19.xml und styles-v21.xml das windowTranslucent attr hinzu:

styles-v19.xml, v21:

<resources>
<item name="android:windowTranslucentStatus">true</item>
</resources>

Und schließlich fügen Sie auf Ihren Dimensionen, dimensions-v19, dimension-v21, die Werte für die Symbolleiste topMargin und die Höhe der statusBarHeight: dimension.xml für weniger als KitKat hinzu:

<resources>
<dimen name="toolbarElevation">4dp</dimen>
<dimen name="appBarTopMargin">0dp</dimen>
<dimen name="statusBarHeight">0dp</dimen>
</resources>

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

<resources>
<dimen name="statusBarHeight">24dp</dimen>
<dimen name="appBarTopMargin">24dp</dimen>
</resources>

dimension-v21.xml für Lolipop, fügen Sie bei Bedarf einfach die Höhe hinzu:

<resources>
<dimen name="statusBarElevation">4dp</dimen>
</resources>

Dies ist das Ergebnis für Jellybean KitKat und Lollipop:

Geben Sie hier die Bildbeschreibung ein

Moti Bartov
quelle
Anstatt den Check-in-Code einzufügen, haben Sie ihn in XML eingefügt. Ihre Lösung wird auf Kitkat funktionieren, genau wie das, was er bekommen hat.
Android-Entwickler
26

Sie können diesen einfachen Code verwenden:

Einzeiler in Kotlin:

window.statusBarColor = ContextCompat.getColor(this, R.color.colorName)

Ursprüngliche Antwort mit Java & manueller Versionsprüfung:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    getWindow().setStatusBarColor(getResources().getColor(R.color.colorAccentDark_light, this.getTheme()));
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    getWindow().setStatusBarColor(getResources().getColor(R.color.colorAccentDark_light));
}
Steve Moretz
quelle
Sie können dies weiter vereinfachen, indem Sie verwenden ContextCompat. In Kotlin ist es dann genau das:window.statusBarColor = ContextCompat.getColor(this, R.color.colorName)
Sunadorer
Als ich es schrieb, hatte ich Kotlin noch nicht ausprobiert. Warum bearbeitest du die Antwort nicht und ich kann sie genehmigen :)
Steve Moretz
Gute Idee. Ich habe meinen Vorschlag in die Antwort als einfache Referenz für zukünftige Besucher aufgenommen
Sunadorer
Die Farbe der Statusleiste wurde über Build.VERSION_CODES.M geändert. arbeitet nicht unter Lollipop
Muhammed Haris
@ MuhammedHaris es funktioniert. Hast du den Kotlin- oder Java-Code verwendet?
Steve Moretz
23

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

<style name="AppTheme.GrayStatusBar" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimaryDark">@color/colorGray</item>
</style>

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

<activity
    android:name=".LoginActivity"
    android:theme="@style/AppTheme.GrayStatusBar" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

So sollte Ihre res / values ​​/ colours.xml aussehen:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="colorPrimary">#3F51B5</color>
    <color name="colorPrimaryDark">#303F9F</color>
    <color name="colorAccent">#c6d6f0</color>
    <color name="colorGray">#757575</color>
</resources>
Vergleiche
quelle
1
Ich denke, dies ist die einfachste und zugleich sauberste Lösung. Keine Mindest-API-Stufe von 21 erforderlich , nur einfaches Überschreiben. Verdient mehr Up-Votes.
Tahsin Rupam
Dies funktionierte nicht, wenn es auf Nougat ausgeführt wurde und die API-Ebene auf 19 eingestellt war. Es funktionierte, wenn ich android: theme unter dem Anwendungsknoten im Manifest festlegte.
AndroidDev
18

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

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

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

<item name="android:windowLightStatusBar">true</item>
Amin Keshavarzian
quelle
1
Danke, es ist auch eine nützliche Antwort.
Andrew Grow
16

Mit dieser Funktion können Sie die Farbe der Statusleiste ändern. funktioniert auf Android L bedeutet API 21 und höher und benötigt eine Farbzeichenfolge 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));
    }
}
sajad abbasi
quelle
15

Ich hatte diese Anforderung: Programmgesteuertes Ändern der Statusleistenfarbe, um sie transparent zu halten , damit sich die Navigationsleiste über die transparente Statusleiste hinweg überzeichnen kann.

Ich kann das nicht mit der API machen

getWindow().setStatusBarColor(ContextCompat.getColor(activity ,R.color.my_statusbar_color)

Wenn Sie hier im Stapelüberlauf alle vor dieser Codezeile überprüfen, setzen Sie die Transparenz der Statusleiste auf solid mit

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)

Ich kann Farbe und Transparenz der Statusleiste folgendermaßen verwalten :

  • Android 4: Sie können nicht viel tun, da Sie die Farbe der Statusleiste nicht über die API verwalten können. Sie können lediglich die Statusleiste als durchscheinend festlegen und ein farbiges Element Ihrer Benutzeroberfläche unter den Status verschieben Bar. Dazu musst du spielen

    android:fitsSystemWindows="false"

    in Ihrem Hauptlayout. Auf diese Weise können Sie Ihr Layout unter der Statusleiste zeichnen. Dann müssen Sie mit etwas Polsterung oben in Ihrem Hauptlayout spielen.

  • Android 5 und höher: Sie müssen einen Stil mit definieren

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

    Dadurch kann die Navigationsleiste die Statusleiste überlappen.

    Um die Farbe zu ändern und die Statusleiste transparent zu halten, müssen Sie die Farbe der Statusleiste festlegen

    drawerLayout.setStatusBarBackgroundColor(ContextCompat.getColor(activity, R.color.my_statusbar_color))

    wobei drawerLayout so definiert ist

    <android.support.v4.widget.DrawerLayout
        android:id="@+id/drawer_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true">
DSoldo
quelle
Es hat bei mir ohne funktioniert <item name="android:windowDrawsSystemBarBackgrounds">true</item>. Wie auch immer, nach Tagen der Suche habe ich etwas gefunden, das wirklich funktioniert (momentan nur auf Lolllipop getestet). Vielen Dank
DenisGL
Ich hatte das gleiche Problem und Ihre Antwort half mir, dieses zu lösen.
A.Gun
7

Bearbeiten Sie den colorPrimary in der Datei colours.xml in Values ​​auf die Farbe, die die Statusleiste haben soll. Zum Beispiel:

   <resources>
<color name="colorPrimary">#800000</color> // changes the status bar color to Burgundy
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorAccent">#FF4081</color>
<color name="red">#FF0000</color>
<color name="white">#FFFFFF</color>
<color name="cream">#fffdd0</color>
<color name="burgundy">#800000</color>

PhilipS
quelle
7

Um die Farbe der Statusleiste zu ändern, gehen Sie zu res/values-v21/styles.xmlund Farbe der Statusleiste

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryDark">@color/color_secondary</item>
        <item name="colorAccent">@color/color_accent</item>
        <item name="android:statusBarColor">#0000FF</item>
    </style>
</resources>
Radhason Macht
quelle
Hey, kannst du mir helfen? Ich habe keine Ahnung von Android und kann jetzt nicht anfangen zu lernen. Ich habe eine einfache App, die eine HTML-Datei ausführt. Ich möchte unbedingt die Farbe der Statusleiste ändern, weil das Ober- und Unterteil von # 000 für meinen Paletten schrecklich ist. Aber ich kann es einfach nicht, ich kann nicht einmal die Datei styles.xml finden ... Wenn ich dir meine apk schicken könnte und du sie mir stellst, wäre ich dir dankbar!
Thiago Soubra
6

Wenn Sie die Farbe der Statusleiste programmgesteuert ändern möchten (und vorausgesetzt, das Gerät verfügt über Android 5.0). Dies ist eine einfache Möglichkeit, statusBarColor von jeder Aktivität aus zu ändern, und sehr einfache Methoden, wenn verschiedene Fragmente unterschiedliche Farben in der Statusleiste haben.

 /**
 * @param colorId id of color
 * @param isStatusBarFontDark Light or Dark color
 */
fun updateStatusBarColor(@ColorRes colorId: Int, isStatusBarFontDark: Boolean = true) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        val window = window
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
        window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS)
        window.statusBarColor = ContextCompat.getColor(this, colorId)
        setSystemBarTheme(isStatusBarFontDark)
    }
}

/** Changes the System Bar Theme.  */
@RequiresApi(api = Build.VERSION_CODES.M)
private fun setSystemBarTheme(isStatusBarFontDark: Boolean) {
    // Fetch the current flags.
    val lFlags = window.decorView.systemUiVisibility
    // Update the SystemUiVisibility depending on whether we want a Light or Dark theme.
    window.decorView.systemUiVisibility = if (isStatusBarFontDark) lFlags and View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR.inv() else lFlags or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
}
Nabin
quelle
5

Wenn Sie mit Android 4.4 und höher arbeiten möchten, versuchen Sie dies. Ich beziehe mich auf Harpreets Antwort und diesen Link. Android und die transparente Statusleiste

Rufen Sie zuerst die setStatusBarColored-Methode in der onCreate-Methode von Activity auf (ich habe sie in eine util-Klasse eingefügt). Ich verwende hier ein Bild. Sie können es ändern, um eine Farbe zu verwenden.

public static void setStatusBarColored(Activity context) {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
    {
        Window w = context.getWindow();
        w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        int statusBarHeight = getStatusBarHeight(context);

        View view = new View(context);
        view.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
        view.getLayoutParams().height = statusBarHeight;
        ((ViewGroup) w.getDecorView()).addView(view);
        view.setBackground(context.getResources().getDrawable(R.drawable.navibg));
    }
}

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

Vor: Vor

Nach: nach

Die Farbe der Statusleiste wurde geändert, aber die Navigationsleiste ist abgeschnitten. Daher müssen Sie den Rand oder den Versatz der Navigationsleiste in der onCreate-Methode festlegen.

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
        LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                ViewGroup.LayoutParams.MATCH_PARENT, (int)(this.getResources().getDimension(R.dimen.navibar_height)));
        layoutParams.setMargins(0, Utils.getStatusBarHeight(this), 0, 0);

        this.findViewById(R.id.linear_navi).setLayoutParams(layoutParams);
    }

Dann sieht die Statusleiste so aus.

Statusleiste

Allan
quelle
4

Dies hat bei KitKat und mit guten Ergebnissen für mich funktioniert.

public static void setTaskBarColored(Activity context) {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT)
        {
            Window w = context.getWindow();
            w.setFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            //status bar height
            int statusBarHeight = Utilities.getStatusBarHeight(context);

            View view = new View(context);
            view.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
            view.getLayoutParams().height = statusBarHeight;
            ((ViewGroup) w.getDecorView()).addView(view);
            view.setBackgroundColor(context.getResources().getColor(R.color.colorPrimaryTaskBar));
        }
    }
Harpreet
quelle
2

Noch eine Lösung:

final View decorView = w.getDecorView();
View view = new View(BaseControllerActivity.this);
final int statusBarHeight = UiUtil.getStatusBarHeight(ContextHolder.get());
view.setLayoutParams(new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, statusBarHeight));
view.setBackgroundColor(colorValue);
((ViewGroup)decorView).addView(view);
Vova K.
quelle
Funktioniert dies auf Tablets, bei denen sich die Statusleiste am unteren Bildschirmrand befindet?
guy.gc
6
Was ist 'w' und 'UiUtil' hier?
Manav Patadia
2

Ändern Sie den colorPrimaryDark in die gewünschte Farbe in der Datei res / values ​​/ styles.xml

    <resources>
        <color name="colorPrimary">#800000</color>
        <color name="colorPrimaryDark">#303F9F</color> //This Line
        <color name="colorAccent">#FF4081</color>
        <color name="red">#FF0000</color>
        <color name="white">#FFFFFF</color>
       <color name="cream">#fffdd0</color>
       <color name="burgundy">#800000</color>
    </resources>
Engr Syed Rowshan Ali
quelle