Textfarbe der Statusleiste ändern, wenn primaryDark weiß ist

Lesezeit: 2 Minuten

Benutzer-Avatar
MarcForn

Ich versuche, das Verhalten der Google Kalender-Anwendung zu reproduzieren:
Geben Sie hier die Bildbeschreibung ein

aber ich habe keine Möglichkeit gefunden, die Statustextfarbe zu ändern. Wenn ich colorPrimaryDark auf weiß setze, kann ich weder die Symbole noch den Text der Statusleiste sehen, da ihre Farbe ebenfalls weiß ist.

Gibt es eine Möglichkeit, die Textfarbe der Statusleiste zu ändern?

Ich bin mir nicht sicher, auf welche API-Ebene Sie abzielen möchten, aber wenn Sie API 23-spezifische Dinge verwenden können, können Sie Folgendes zu Ihrer AppTheme styles.xml hinzufügen:

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

Wenn android:windowLightStatusBar auf true gesetzt ist, ist die Textfarbe der Statusleiste sichtbar, wenn die Farbe der Statusleiste weiß ist, und umgekehrt, wenn android:windowLightStatusBar auf false gesetzt ist, wird die Textfarbe der Statusleiste so gestaltet, dass sie sichtbar ist, wenn die Farbe der Statusleiste dunkel ist.

Beispiel:

<!-- 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>
    <!-- Status bar stuff. -->
    <item name="android:statusBarColor">@color/colorPrimaryDark</item>
    <item name="android:windowLightStatusBar">true</item> 
</style>

  • Wenn mein API-Level 21 ist, funktioniert es nicht. Können Sie mir die Alternative dafür nennen?

    – Bala Saikrupa Puram

    31. Januar 2017 um 5:24 Uhr

  • Irgendeine Lösung für API 21 gefunden. Bitte helfen Sie?

    – iMDroid

    14. Juni 2018 um 12:43 Uhr

  • Hinweis: android:windowLightStatusBar erfordert API-Level 23 (aktuelles Minimum ist 21) mehr… (⌘F1)

    – Hardik Darji

    14. Februar 2019 um 10:43 Uhr

  • Für API 21 ist dies nicht möglich. In Google-Anwendungen ist es eher ein schwarzer Balken als ein weißer.

    – Joris

    3. Februar 2020 um 13:00 Uhr

  • Siehe diesen Beitrag für API-Level < 23: stackoverflow.com/questions/49254877/…

    – Basti Vagabund

    15. Februar 2020 um 10:21 Uhr

Sie können das programmgesteuert wie diese Antwort tun

füge das einfach hinzu

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

  • setSystemUiVisibility ist veraltet

    – Luca Ziegler

    5. Januar 2021 um 17:16 Uhr

Benutzer-Avatar
As

Die Kompatible Version funktioniert auf API 23+.

Hier ist es:

// deprecated
// WindowInsetsControllerCompat(window, view).isAppearanceLightStatusBars = Boolean
// also deprecated
// ViewCompat.getWindowInsetsController(view)?.isAppearanceLightStatusBars = Boolean
WindowCompat.getInsetsController(window, decorView)?.isAppearanceLightStatusBars = Boolean

Du kannst bekommen window direkt von einem Activity.

Ich füge es gerne hinzu Window Erweiterungsmethoden:

fun Window.setLightStatusBars(b: Boolean) {
    WindowCompat.getInsetsController(this, decorView)?.isAppearanceLightStatusBars = b
}

Du brauchst androidx.core dafür

Benutzer-Avatar
Wassil G

es ist sehr einfach:

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//  set status text dark
getWindow().setStatusBarColor(ContextCompat.getColor(BookReaderActivity.this,R.color.white));// set status background white

und umgekehrt:

getWindow().setStatusBarColor(ContextCompat.getColor(BookReaderActivity.this, R.color.black));
View decorView = getWindow().getDecorView(); //set status background black 
decorView.setSystemUiVisibility(decorView.getSystemUiVisibility() & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); //set status text  light

Nach der Antwort von @ Jon würde ich sie ein wenig aktualisieren, aber auf neuen APIs. Bei neuen APIs mit Themen und Nachtthemen (dunkler Modus) würde ich dies tun, indem ich die v23/styles.xml hinzufüge und dort den Hintergrund und die Textfarbe der Statusleiste festlege:

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

Und in der night/styles.xml:

<item name="android:statusBarColor" tools:targetApi="l">@color/darkColor</item>
<item name="android:windowLightStatusBar" tools:targetApi="m">false</item>

Die Standard-styles.xml würde keinen oder nur diesen Code enthalten, aber denken Sie daran, ihn nicht auf Licht zu setzen:

<item name="android:statusBarColor">?attr/colorPrimaryVariant</item>

Auf diese Weise stellen wir den hellen Hintergrund (und die Textfarbe) für die Statusleiste ein, aber nur für Geräte mit API 23+. Auf Geräten <23 wird der Hintergrund nicht geändert, da ich denke, dass dies etwas ist, was wir nicht wissen wollen, dass die Textfarbe weiß bleibt. Das dunkle Thema wurde auf API 29 hinzugefügt, sodass wir uns vor dem dunklen Thema auf API 21 nicht fürchten müssen;)

Der Nachteil davon ist jedoch, dass wir eine weitere Datei hinzufügen, an deren Verwaltung wir uns erinnern müssen.

Benutzer-Avatar
Mahr

Wie zuvor erledigt die SYSTEM_UI_FLAG_LIGHT_STATUS_BAR die Arbeit in meinem Fall, vergessen Sie nicht, auf höher als API 22 einzustellen.

fügen Sie dies nach dem setContentView zu oncreate hinzu:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}

Benutzer-Avatar
sakiM

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//  set status text dark

getWindow().setStatusBarColor(ContextCompat.getColor(MainActivity.this,R.color.colorPrimaryDark));// set status background white

Für mich geht das

  • Dies erfordert API-Level 23+.

    – Kandschi

    15. April 2020 um 16:19 Uhr

1335730cookie-checkTextfarbe der Statusleiste ändern, wenn primaryDark weiß ist

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy