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?
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:
@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 ):
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:
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}.
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.
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.
Antworten:
Mit Android M (API Level 23) können Sie dies vom Thema mit
android:windowLightStatusBar
Attribut erreichen.Bearbeiten:
Wie Pdroid erwähnt hat, kann dies auch programmatisch erreicht werden:
getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
quelle
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
colorPrimary
auf weiß oder programmgesteuert:getWindow().setStatusBarColor(Color.WHITE);
quelle
SDK >= 23
aber @being_sohelkhan hat aus irgendeinem Grund meine ursprüngliche Antwort bearbeitet ... stackoverflow.com/posts/46897243/revisionsGerade 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 }
quelle
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}.
quelle
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()
quelle
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.
quelle
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>
quelle