webentwicklung-frage-antwort-db.com.de

Ändern Sie die Textfarbe der Statusleiste, wenn primaryDark weiß ist

Ich versuche, das Verhalten der Google Kalender-Anwendung zu reproduzieren:  enter image description here

ich habe jedoch keine Möglichkeit gefunden, die Statustextfarbe zu ändern. Wenn ich den colorPrimaryDark auf weiß gesetzt habe, 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?

Danke im Voraus

26
MarcForn

Ich bin nicht sicher, auf welcher API-Ebene Sie versuchen, ein Targeting durchzuführen, aber wenn Sie API 23-spezifisches Material verwenden können, können Sie Ihrer AppTheme styles.xml Folgendes hinzufügen:

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

wenn Android:windowLightStatusBar auf true gesetzt ist, kann die Textfarbe der Statusleiste angezeigt werden, wenn die Farbe der Statusleiste weiß ist, und umgekehrt Wenn Android:windowLightStatusBar auf false gesetzt ist, wird die Textfarbe der Statusleiste angezeigt Die Statusleiste ist dunkel.

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>
52
Jon Liu

das können Sie programmgesteuert so machen Antwort

füge einfach das hinzu 

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
5
M.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
1
Vasily G

Versuchen Sie dies einmal.

Fügen Sie in Ihre Methode activity onCreate() den folgenden Code ein.

try {
        if (Android.os.Build.VERSION.SDK_INT >= 21) {
                Window window = getWindow();
                window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
                window.setStatusBarColor(ContextCompat.getColor(this, R.color.color_red));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

Hinweis: color_red - ist die Farbe der Statusleiste.

0
Surendar D

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

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

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