web-dev-qa-db-fra.com

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

J'essaie de reproduire le comportement de l'application Google Agenda:  enter image description here

mais je n'ai pas trouvé le moyen de changer la couleur du texte du statut. Si je mets en blanc colorPrimaryDark, je ne peux pas voir les icônes ni le texte de la barre d'état car leur couleur est également blanche.

Est-il possible de changer la couleur du texte de la barre d'état?

Merci d'avance

26
MarcForn

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 les éléments suivants à votre AppTheme styles.xml:

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

lorsque Android:windowLightStatusBar est défini sur true, la couleur du texte de la barre d'état sera visible lorsque la couleur de la barre d'état est blanche, et inversement lorsque Android:windowLightStatusBar est défini sur false, la couleur du texte de la barre d'état est conçue pour être visible 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>
52
Jon Liu

vous pouvez le faire par programme comme ceci répondre

il suffit d'ajouter ceci 

getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
5
M.G

Comme précédemment, les SYSTEM_UI_FLAG_LIGHT_STATUS_BAR font 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);
}
0
Maher