web-dev-qa-db-fra.com

Comment changer la couleur de la barre d'état pour qu'elle corresponde à celle de l'application dans Lollipop? [Android]

Dans la nouvelle mise à jour de Lollipop, j'ai remarqué qu'avec les applications Google natives, la couleur de la barre d'état était modifiée pour correspondre à la barre d'actions de l'application que vous exécutez. Je vois que c'est aussi sur l'application Twitter, donc je suppose que ce n'est pas exclusivement Google qui peut le faire.

Est-ce que quelqu'un sait comment faire cela si c'est possible?

96
Briscoooe

Pour changer la couleur de la barre d'état, utilisez setStatusBarColor (int color) . Selon le javadoc, nous devons également définir des drapeaux sur la fenêtre.

Extrait de code de travail:

Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(ContextCompat.getColor(activity, R.color.example_color));


Gardez à l'esprit selon les directives de conception des matériaux la couleur de la barre d'état et la couleur de la barre d'action doivent être différentes:

  • ActionBar doit utiliser couleur primaire 500
  • StatusBar doit utiliser couleur primaire 700

Regardez la capture d'écran ci-dessous:

enter image description here

218
klimat

Ajoutez simplement ceci dans vous styles.xml. ColorPrimary est destiné à la barre d'action et colorPrimaryDark à la barre d'état.

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="Android:colorPrimary">@color/primary</item>
    <item name="Android:colorPrimaryDark">@color/primary_dark</item>
</style>

Cette image du développeur Android explique plus en détail la palette de couleurs. Vous pouvez en lire plus à ce sujet lien .

enter image description here

47
Gjoko Bozinov

Un autre moyen de définir la couleur de la barre d'état consiste à utiliser style.xml.

Pour ce faire, créez un fichier style.xml sous le dossier res/values-v21 avec ce contenu:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <style name="AppTheme" parent="Android:Theme.Material">
        <!--   darker variant for the status bar and contextual app bars -->
        <item name="Android:colorPrimaryDark">@color/blue_dark</item>
    </style>
</resources>

Edit: Comme indiqué dans les commentaires, lors de l'utilisation d'AppCompat, le code est différent. Dans le fichier res/values ​​/ style.xml utilisez plutôt:

<style name="Theme.MyTheme" parent="Theme.AppCompat.Light">   
    <!-- Set AppCompat’s color theming attrs -->
    <item name="colorPrimary">@color/my_awesome_red</item>
    <item name="colorPrimaryDark">@color/my_awesome_darker_red</item>
    <!-- Other attributes -->
</style>
40
Alberto Malagoli

Pour définir la couleur de la barre d'état, créez un fichier style.xml dans le dossier res/values-v21 avec ce contenu:

<?xml version="1.0" encoding="utf-8"?>
<resources>

    <style name="AppBaseTheme" parent="AppTheme">
        <item name="Android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="Android:statusBarColor">@color/blue</item>
    </style>

</resources>
21
Muhammad Aamir Ali

De même, si vous voulez différentes couleurs status-bar _ pour différentes activités ( fragments ), vous pouvez le faire en procédant comme suit (travaillez sur les API 21 et supérieures):

Commencez par créer values21/style.xml et mettez le code suivant:

 <style name="AIO" parent="AIOBase">
            <item name="Android:windowDrawsSystemBarBackgrounds">true</item>
            <item name="Android:windowContentTransitions">true</item>
    </style>

Puis définissez les thèmes blancs | sombres dans votre values/style.xml comme suit:

 <style name="AIOBase" parent="Theme.AppCompat.Light.NoActionBar">
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryDark">@color/color_primary_dark</item>
        <item name="colorAccent">@color/color_accent</item>
        <item name="Android:textColorPrimary">@Android:color/black</item>
        <item name="Android:statusBarColor" tools:targetApi="Lollipop">@color/color_primary_dark
        </item>
        <item name="Android:textColor">@color/gray_darkest</item>
        <item name="Android:windowBackground">@color/default_bg</item>
        <item name="Android:colorBackground">@color/default_bg</item>
    </style>


    <style name="AIO" parent="AIOBase" />

    <style name="AIO.Dark" parent="AIOBase">
        <item name="Android:statusBarColor" tools:targetApi="Lollipop">#171717
        </item>
    </style>

    <style name="AIO.White" parent="AIOBase">
        <item name="Android:statusBarColor" tools:targetApi="Lollipop">#bdbdbd
        </item>
    </style>

N'oubliez pas non plus d'appliquer des thèmes dans votre manifest.xml.

3
Amir

Ajoutez cette ligne dans le style de la v21 si vous utilisez deux styles.

  <item name="Android:statusBarColor">#43434f</item>
3
Amit Walke

Dans Android pre Lollipop devices, vous pouvez le faire à partir de SystemBarTintManager Si vous utilisez Android studio, ajoutez simplement Systembartint lib dans votre fichier de classement.

dependencies {
    compile 'com.readystatesoftware.systembartint:systembartint:1.0.3'
    ...
}

Puis dans ton activité

// create manager instance after the content view is set
SystemBarTintManager mTintManager = new SystemBarTintManager(this);
// enable status bar tint
mTintManager.setStatusBarTintEnabled(true);
mTintManager.setTintColor(getResources().getColor(R.color.blue));
2
Muhammad Aamir Ali