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


87

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

Ich habe jedoch 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 deren Farbe ebenfalls weiß ist.

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

Danke im Voraus

Antworten:


174

Ich bin nicht sicher, auf welche API-Ebene Sie abzielen möchten, aber wenn Sie API 23-spezifische Inhalte 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:windowLightStatusBartrue festgelegt ist, kann die Textfarbe der Statusleiste angezeigt werden, wenn die Farbe der Statusleiste weiß ist. Wenn sie android:windowLightStatusBarauf false gesetzt ist, wird die Textfarbe der Statusleiste so angezeigt, dass sie angezeigt wird, wenn die Farbe der Statusleiste angezeigt wird 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>

38
Wenn mein API-Level 21 ist, funktioniert es nicht.
Kannst

8
Irgendeine Lösung für Api 21 gefunden. Bitte helfen Sie?
iMDroid

1
Hinweis: android: windowLightStatusBar benötigt API Level 23 (aktuelle min ist 21) mehr ... (⌘F1)
Hardik Darji

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

1
Siehe diesen Beitrag für API Level <23: stackoverflow.com/questions/49254877/…
Basti Vagabond

30

Sie können dies programmgesteuert wie diese Antwort tun

füge das einfach hinzu

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

14

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

4

Wie zuvor erledigt die SYSTEM_UI_FLAG_LIGHT_STATUS_BAR die Arbeit in meinem Fall. Vergessen Sie nicht, eine höhere als API 22 festzulegen.

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

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

1
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+.
Kanji

0

Versuchen Sie dies einmal.

Fügen Sie in Ihrer Aktivitätsmethode 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.


2
Die Frage bezieht sich auf die Textfarbe der Statusleiste, nicht auf den Hintergrund der Statusleiste.
Kanji

0

Fügen Sie in Ihrer Aktivitätsmethode onCreate()den folgenden Code nach dem einsetContentView(R.layout.activity_generic_main);

Hier ist der folgende Beispielcode.

public class GenericMain extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_generic_main);
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);

    }
}

0

Versuchen Sie dies, wenn keine Begrüßungsseite vorhanden ist

getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);
getActivity().getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getActivity().getWindow().setNavigationBarColor(ContextCompat.getColor(context, R.color.white));
getActivity().getWindow().setStatusBarColor(ContextCompat.getColor(context, R.color.white));
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.