web-dev-qa-db-fra.com

Comment changer la couleur d'arrière-plan de Android

Je souhaite modifier la couleur d'arrière-plan de la barre d'état en écrivant une application. Mon Android a la couleur noire, je veux le changer en une autre couleur. J'ai vu quelques articles à ce sujet ici, mais ils parlent de l'arrière-plan des notifications.

Si un organisme le sait, aidez-moi.

La barre d'état par défaut

enter image description here

Après avoir utilisé un dessin comme arrière-plan de la barre d'état

enter image description here

20
Yugandhar Babu

Désolé, sauf si vous faites un ROM ROM personnalisé, cela n'est pas possible, sauf si vous souhaitez uniquement que la barre d'état soit modifiée pour votre application.

Cela nécessiterait beaucoup de travail.

Vous devez d'abord ajouter Theme.NoTitleBar.Fullscreen à votre manifeste

<application
        Android:icon="@drawable/ic_launcher"
        Android:label="@string/app_name" 
        Android:theme="@Android:style/Theme.NoTitleBar.Fullscreen"
        >

Ensuite, une fois que vous avez fait cela, vous devez créer une mise en page standard qui représente la barre d'état, cela signifierait que vous devez ajouter l'heure et également recevoir toutes les notifications d'autres applications, je ne sais pas personnellement comment le faire, mais Je suis sûr qu'il existe un moyen.

Si vous voulez vraiment faire cette chance, vous avez du mal à vous devancer.


Désolé, sauf si vous savez comment créer des ROM personnalisées, je ne pense pas que ce soit possible

13
FabianCook

Cela est possible sur KitKat et après.

Si vous souhaitez l'utiliser dans une application (comme vous l'avez demandé), vous pouvez utiliser cette bibliothèque https://github.com/jgilfelt/SystemBarTint

Il vous suffit d'écrire:

// set a custom tint color for all system bars
tintManager.setTintColor(Color.parseColor("#99000FF"));   
// set a custom navigation bar resource
tintManager.setNavigationBarTintResource(R.drawable.my_tint);
// set a custom status bar drawable
tintManager.setStatusBarTintDrawable(MyDrawable);
12
Ravit D

Dans styles.xml, procédez comme suit:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.Light">
        <item name="colorPrimary">@color/color_primary</item>
        <item name="colorPrimaryDark">@color/color_secondary</item>
        <item name="colorAccent">@color/color_accent</item>
         <!---Below is the code for status bar color------>
        <item name="Android:statusBarColor">@color/color_primary</item>
    </style>
</resources>

Placez-le dans votre fichier values-v21/styles.xml, pour l'activer sur Lollipop et versions ultérieures.

Pour le faire par programme, vous pouvez le faire:

Window window = activity.getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
window.setStatusBarColor(activity.getResources().getColor(R.color.example_color));
9
Gaurav Singh

SI vous voulez mettre à jour la couleur de la barre d'état sur Lollipop sans mettre à jour votre ADT et SDK et tout ce qui s'y rapporte, vous pouvez utiliser des réflexions pour atteindre les méthodes de l'API 21 (Lollipop) et plus

dans votre activité:

    if (Build.VERSION.SDK_INT >= 21) {
        Window window = getWindow();

        // original code, works on Lollipop SDKs
        // window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        // window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        // window.setStatusBarColor(getResources().getColor(YOUR_COLOR));

        try {
            // to work on old SDKs 
            int FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS = 0x80000000;
            window.addFlags(FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
            window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

            Class<?> cls = window.getClass();
            Method method = cls.getDeclaredMethod("setStatusBarColor",
                    new Class<?>[] { Integer.TYPE });

            method.invoke(window, Res.color(theme.statusColor));

        } catch (Exception e) {
            // upgrade your SDK and ADT :D
        }

    }

mon API minimale actuelle est de 15, si vous ne trouvez pas

WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS

dans votre SDK, vous pouvez obtenir sa valeur de la documentation comme ce que j'ai fait avec

WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS

j'espère que cela a aidé

1
Ahmed Adel Ismail