web-dev-qa-db-fra.com

Barre d'état de jeu de sucettes Android Couleur du texte

J'essaie de définir la couleur du texte de la barre d'état dans Android v21, mais je ne vois pas de méthode d'API pour cela. Voici ce que j'ai jusqu'ici pour le fond

MyActivity.Java> onCreate:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
        Window window = getWindow();
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

        window.setStatusBarColor(getResources().getColor(R.color.white));

    }

De toute évidence, le texte blanc sur fond blanc ne fonctionnera pas. Je cherche quelque chose comme

window.setStatusBarTextColor(getResources().getColor(R.color.orange));
21
Ghaladen

Android 5.0 

nous sommes en mesure de modifier uniquement la couleur de la barre d'état et non la couleur du texte de la barre d'état.

il n'y a pas de méthode comme 

setStatusBarTextColor(getResources().getColor(R.color.orange));

En bref, ce n'est pas possible sur Android 5.0. Cochez cette réponse

1

Vous ne pouvez pas définir la couleur du texte de la barre d'état en spécifiant explicitement une couleur.

Mais vous pouvez essayer ci-dessous l’alternative ajoutée dans l’API 23,

Vous pouvez utiliser l'attribut "Android: windowLightStatusBar" de deux manières.

  • "Android: windowLightStatusBar" = true, la couleur du texte de la barre d'état sera Compatible (gris) lorsque la couleur de la barre d'état est claire
  • "Android: windowLightStatusBar" = false, la couleur du texte de la barre d'état sera Compatible (blanc) lorsque la couleur de la barre d'état est sombre
<style name="statusBarStyle" parent="@Android:style/Theme.DeviceDefault.Light">
        <item name="Android:statusBarColor">@color/status_bar_color</item>
        <item name="Android:windowLightStatusBar">false</item>
</style>

Vous pouvez vérifier ci-dessus api dans lien ci-dessous - https://developer.Android.com/reference/Android/R.attr.html#windowLightStatusBar

50
Sunita

Voici une implémentation Java de la réponse de Gandalf458 .

/** Changes the System Bar Theme. */
@RequiresApi(api = Build.VERSION_CODES.M)
public static final void setSystemBarTheme(final Activity pActivity, final boolean pIsDark) {
    // Fetch the current flags.
    final int lFlags = pActivity.getWindow().getDecorView().getSystemUiVisibility();
    // Update the SystemUiVisibility dependening on whether we want a Light or Dark theme.
    pActivity.getWindow().getDecorView().setSystemUiVisibility(pIsDark ? (lFlags & ~View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR) : (lFlags | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR));
}
15
Mapsy

Vous pouvez également le faire au moment de l'exécution. Voici un exemple pour Mono.Android utilisant le drapeau SystemUiVisibility. Vous devez effectuer quelques opérations au niveau des bits pour changer l'indicateur. Votre application doit être définie sur l'API cible 23 ou supérieure pour être compilée avec cet indicateur.

//Android 6.0 introduced the ability to set a light colored text on the status bar
//MyActivity needs to be changed to your activity

if(Android.OS.Build.VERSION.SdkInt >= Android.OS.BuildVersionCodes.M)
{
    int newUiVisibility = (int)MyActivity.Window.DecorView.SystemUiVisibility;

    if(state == StatusBarState.Light)
    {
        //Dark Text to show up on your light status bar
        newUiVisibility |= (int)Android.Views.SystemUiFlags.LightStatusBar;
    }
    else if(state == StatusBarState.Dark)
    {
        //Light Text to show up on your dark status bar
        newUiVisibility &= ~(int)Android.Views.SystemUiFlags.LightStatusBar;
    }

    MyActivity.Window.DecorView.SystemUiVisibility = (Android.Views.StatusBarVisibility)newUiVisibility;
}

public enum StatusBarState
{
    Light,
    Dark
}
7
Gandalf458

Vous pouvez utiliser cette ligne pour définir une couleur de texte plus sombre lorsque vous utilisez le blanc pour la barre d'état.

window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
0
Vajani Kishan