web-dev-qa-db-fra.com

Changer la couleur de la barre d'état avec AppCompat ActionBarActivity

dans mon activité, je change la couleur de la barre d’outils en utilisant Palette, mais sur les périphériques 5.0 en utilisant ActionBarActivity, la couleur status bar est la couleur de ma colorPrimaryDark dans mon thème d’activité.

Je réalise que dans la version 5.0, vous pouvez utiliser Window.setStatusBarColor() mais ActionBarActivity ne l’a pas.

ma question est donc dans 5.0 comment puis-je changer la couleur de la barre d'état avec ActionBarActivity?

126
tyczj

Je ne suis pas sûr de comprendre le problème.

Si vous souhaitez modifier la couleur de la barre d'état par programme (et à condition que l'appareil dispose d'Android 5.0), vous pouvez utiliser Window.setStatusBarColor() . Que l'activité soit dérivée de Activity ou ActionBarActivity ne devrait pas faire de différence.

Essayez juste de faire:

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

Vient de tester cela avec ActionBarActivity et cela fonctionne bien.


Remarque: Il n'est pas nécessaire de définir l'indicateur FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS par programme si votre fichier de styles values-v21 l'a déjà défini, via:

    <item name="Android:windowDrawsSystemBarBackgrounds">true</item>
357
matiash

Il existe différentes façons de changer la couleur de la barre d'état.

1) Utilisation du fichier styles.xml. Vous pouvez utiliser l'attribut Android: statusBarColor pour le faire de manière simple mais statique. 

Remarque: vous pouvez également utiliser cet attribut avec le thème Matériau.

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="AppTheme.Base">
        <item name="Android:statusBarColor">@Android:color/transparent</item>
    </style>
</resources>

2) Vous pouvez le faire de manière dynamique en utilisant la méthode setStatusBarColor (int) dans la classe Window. Mais rappelez-vous que cette méthode est uniquement disponible pour API 21 ou supérieure. Assurez-vous donc de vérifier cela, sinon votre application se bloquera sûrement dans les périphériques inférieurs.

Voici un exemple de travail de cette méthode.

if (Build.VERSION.SDK_INT >= 21) {
            Window window = getWindow();
            window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
            window.setStatusBarColor(getResources().getColor(R.color.primaryDark));
}

où primaryDark est la teinte 700 de la couleur primaire que j'utilise dans mon application. Vous pouvez définir cette couleur dans le fichier colors.xml.

Essayez-le et laissez-moi savoir si vous avez des questions. J'espère que ça aide.

50
Aritra Roy

Je ne pense pas que la couleur de la barre d'état ait été implémentée dans AppCompat pour le moment. Ce sont les attributs qui sont disponibles:

    <!-- ============= -->
    <!-- Color palette -->
    <!-- ============= -->

    <!-- The primary branding color for the app. By default, this is the color applied to the
         action bar background. -->
    <attr name="colorPrimary" format="color" />

    <!-- Dark variant of the primary branding color. By default, this is the color applied to
         the status bar (via statusBarColor) and navigation bar (via navigationBarColor). -->
    <attr name="colorPrimaryDark" format="color" />

    <!-- Bright complement to the primary branding color. By default, this is the color applied
         to framework controls (via colorControlActivated). -->
    <attr name="colorAccent" format="color" />

    <!-- The color applied to framework controls in their normal state. -->
    <attr name="colorControlNormal" format="color" />

    <!-- The color applied to framework controls in their activated (ex. checked) state. -->
    <attr name="colorControlActivated" format="color" />

    <!-- The color applied to framework control highlights (ex. ripples, list selectors). -->
    <attr name="colorControlHighlight" format="color" />

    <!-- The color applied to framework buttons in their normal state. -->
    <attr name="colorButtonNormal" format="color" />

    <!-- The color applied to framework switch thumbs in their normal state. -->
    <attr name="colorSwitchThumbNormal" format="color" />

(À partir de\sdk\extras\Android\support\v7\appcompat\res\values ​​\ attrs.xml )

8
JstnPwll

Essayez ceci, Je l’ai utilisé et cela fonctionne très bien avec v21.

<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light">
    <item name="colorPrimaryDark">@color/blue</item>
</style>
3
Manoj Kumar

Appliquer 

    <item name="Android:statusBarColor">@color/color_primary_dark</item>
<item name="Android:windowDrawsSystemBarBackgrounds">true</item>

dans Theme.AppCompat.Light.DarkActionBar n'a pas fonctionné pour moi. Quel est le truc, donner colorPrimaryDark comme d'habitude avec Android:colorPrimary dans styles.xml 

<item name="Android:colorAccent">@color/color_primary</item>
<item name="Android:colorPrimary">@color/color_primary</item>
<item name="Android:colorPrimaryDark">@color/color_primary_dark</item>

et dans la mise 

if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
                {
                    Window window = this.Window;
                    Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
                }

n'a pas eu à définir la couleur de la barre d'état dans le code. 

1
Annu

Merci pour les réponses ci-dessus, avec l'aide de ceux-ci, après certaines recherches et développement pour xamarin.Android MVVMCross

Indicateur spécifié pour l'activité dans la méthode OnCreate

protected override void OnCreate(Bundle bundle)
    {
        base.OnCreate(bundle);
        this.Window.AddFlags(WindowManagerFlags.DrawsSystemBarBackgrounds);
    }

Pour chaque activité MvxActivity, le thème est mentionné ci-dessous

 [Activity(
    LaunchMode = LaunchMode.SingleTop,
    ScreenOrientation = ScreenOrientation.Portrait,
    Theme = "@style/Theme.Splash",
    Name = "MyView"
    )]

Mon SplashStyle.xml ressemble à ce qui suit

<?xml version="1.0" encoding="utf-8"?>
<resources> 
    <style name="Theme.Splash" parent="Theme.AppCompat.Light.NoActionBar">
          <item name="Android:statusBarColor">@color/app_red</item>
          <item name="Android:colorPrimaryDark">@color/app_red</item>
    </style>
 </resources>

Et j'ai V7 appcompact référé. 

0
Pallavi