Как изменить цвет значка уведомлений панели состояния в андроиде (зефир и выше 23+)?

Как гласит название, как изменить цвет значков строки состояния, чтобы иметь темный оттенок вместо белого по умолчанию.

С

введите описание изображения здесь

С

темная строка состояния

Ответы

Ответ 1

Для значков в строке состояния, чтобы иметь темный оттенок вместо белого по умолчанию, добавьте следующий тег в свой styles.xml (или более точно в values-v23/styles.xml) файл:

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

Вы также можете изменить флаг во время выполнения, установив его на любой 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);
    }
}

Если вы хотите reset внести изменения, снимите флаг следующим образом:

yourView.setSystemUiVisibility(0);

Ответ 2

Ниже приведен пример кода, измените цвет строки состояния при переключении между портретом и ландшафтом. портретный режим: световой бар, темный значок; ландшафтный режим: темный бар, световой значок; Тема: "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"));
            }
        }
    }