Changer la couleur du texte de la barre d'état lorsque primaryDark est blanc

87

J'essaye de reproduire le comportement de l'application Google Agenda: entrez la description de l'image ici

mais je n'ai pas trouvé de moyen de changer la couleur du texte d'état. Si je règle le colorPrimaryDark sur blanc, je ne vois ni les icônes ni le texte de la barre d'état car leur couleur est également blanche.

Existe-t-il un moyen de modifier la couleur du texte de la barre d'état?

Merci d'avance

MarcForn
la source

Réponses:

174

Je ne sais pas quel niveau d'API vous essayez de cibler, mais si vous pouvez utiliser des éléments spécifiques à l'API 23, vous pouvez ajouter ce qui suit à votre AppTheme styles.xml:

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

lorsque la valeur android:windowLightStatusBarest définie sur true, la couleur du texte de la barre d'état sera visible lorsque la couleur de la barre d'état est blanche, et vice-versa lorsqu'elle android:windowLightStatusBarest définie sur false, la couleur du texte de la barre d'état sera conçue pour être vue lorsque la couleur de la barre d'état est sombre.

Exemple:

<!-- 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>
Jon
la source
38
si mon niveau d'API est de 21, cela ne fonctionne pas, pouvez-vous me dire l'alternative pour cela
saikrupa
8
Une solution trouvée pour Api 21. Veuillez aider?
iMDroid
1
Remarque: android: windowLightStatusBar nécessite le niveau d'API 23 (le minimum actuel est de 21) plus ... (⌘F1)
Hardik Darji
Pour l'API 21, cela n'est pas possible. Dans les applications Google, c'est une barre noire plutôt qu'une barre blanche.
Joris
1
Voir cet article pour le niveau d'API <23: stackoverflow.com/questions/49254877/…
Basti Vagabond
30

vous pouvez le faire par programme comme cette réponse

ajoute juste ceci

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
MG
la source
14

c'est très simple:

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

et vice versa:

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
Vasily G
la source
4

Comme précédemment, le SYSTEM_UI_FLAG_LIGHT_STATUS_BAR fait le travail dans mon cas, n'oubliez pas de définir une valeur supérieure à l'API 22.

ajoutez ceci à oncreate après le setContentView:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
}
Maher
la source
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

Ça marche pour moi

Mudassar
la source
Cela nécessite le niveau d'API 23+.
kanji le
0

Essayez ceci une fois.

Dans votre onCreate()méthode d' activité , collez le code suivant.

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();
        }

Remarque: color_red - est la couleur de la barre d'état.

Surendar D
la source
2
La question concerne la couleur du texte de la barre d'état, pas l'arrière-plan de la barre d'état.
kanji le
0

Dans votre onCreate()méthode d' activité , collez le code suivant après lesetContentView(R.layout.activity_generic_main);

Voici l'exemple de code ci-dessous.

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);

    }
}
Adnan
la source
0

Essayez ceci sinon la page d'accueil

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 (contexte, R.color.white));
getActivity (). getWindow (). setStatusBarColor (ContextCompat.getColor (contexte, R.color.white));
user5071155
la source