web-dev-qa-db-fra.com

Comment changer la couleur / teinte des icônes de notification de la barre d'état dans Android (Marshmallow et au-dessus de 23+))?

Comme le titre l'indique, comment puis-je changer la couleur des icônes de la barre d'état pour avoir une teinte sombre au lieu du blanc par défaut.

[~ # ~] de [~ # ~]

enter image description here

[~ # ~] à [~ # ~]

dark status bar

19
Sazid

Pour que les icônes de la barre d'état "aient une teinte sombre au lieu du blanc par défaut, ajoutez la balise suivante dans votre styles.xml (ou plus précisément dans values-v23/styles.xml) fichier:

<item name="Android:windowLightStatusBar" tools:targetApi="23">true</item>

Vous pouvez également modifier l'indicateur au moment de l'exécution en le définissant sur n'importe quel View:

View yourView = findViewById(R.id.your_view);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
    if (yourView != null) {
        yourView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
    }
}

Si vous souhaitez réinitialiser les modifications, désactivez le drapeau comme ceci:

yourView.setSystemUiVisibility(0);
70
Sazid

Ci-dessous est un exemple de code, changez la couleur de la barre d'état lorsque vous basculez entre portrait et paysage. mode portrait: barre claire, icône sombre; mode paysage: barre sombre, icône claire; Thème: "Theme.AppCompat.Light"

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        Window window = getWindow();
        View decorView = window.getDecorView();
        if(Configuration.ORIENTATION_LANDSCAPE == newConfig.orientation) {
            decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                    | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                    | View.SYSTEM_UI_FLAG_FULLSCREEN
                    | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
                window.setStatusBarColor(Color.parseColor("#55000000")); // set dark color, the icon will auto change light
            }
        } else {
            decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_VISIBLE|View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Lollipop) {
                window.setStatusBarColor(Color.parseColor("#fffafafa"));
            }
        }
    }
2
Jian Li