Как изменить цвет строки состояния в Android?

Я хочу изменить цвет выделенной полосы в Android Studio:

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

Как я могу это сделать?

Ответ 1

Вы можете изменить его, установив android:statusBarColor или android:colorPrimaryDark стиля, который вы используете для своего приложения, в styles.xml.

(android:statusBarColor наследует значение android:colorPrimaryDark по умолчанию)

Например (поскольку здесь мы используем тему AppCompat, пространство имен android опущено):

<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    <item name="colorPrimaryDark">@color/your_custom_color</item>
</style>

На уровне API 21+ вы также можете использовать метод Window.setStatusBarColor() из кода.

Из его документов:

Чтобы это вступило в силу, окно должно рисовать фоны системной панели с помощью WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS и WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS не должны быть установлены. Если цвет непрозрачен, рассмотрите возможность установки View.SYSTEM_UI_FLAG_LAYOUT_STABLE и View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN.

Чтобы установить эти флаги, вы можете сделать что-то вроде этого:

// getWindow() is a method of Activity
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

Ответ 2

Строка состояния - системное окно, принадлежащее операционной системе.   На устройствах до 5.0 для Android приложения не имеют права изменять свой цвет, поэтому это не то, что библиотека AppCompat может поддерживать более старые версии платформы. Лучшим AppCompat может служить поддержка окраски ActionBar и других общих виджетах пользовательского интерфейса в приложении.

На устройствах после 5.0 для Android Изменение цвета строки состояния также требует установки двух дополнительных флагов в окне; вам нужно добавить флаг FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS и очистить флаг FLAG_TRANSLUCENT_STATUS.

Window window = activity.getWindow();

// clear FLAG_TRANSLUCENT_STATUS flag:
window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

// add FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS flag to the window
window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);

// finally change the color
window.setStatusBarColor(activity.getResources().getColor(R.color.my_statusbar_color));

Ответ 3

Вы также можете добавить эти строки кода в основное действие

 if (Build.VERSION.SDK_INT >= 21) {
        getWindow().setNavigationBarColor(ContextCompat.getColor(this, R.color.dark_nav)); // Navigation bar the soft bottom of some phones like nexus and some Samsung note series  
        getWindow().setStatusBarColor(ContextCompat.getColor(this,R.color.statusbar)); //status bar or the time bar at the top
      }

Ответ 4

добавить цвет строки состояния к вашему стилю и готово

<item name="android:statusBarColor">@color/black</item>

Ответ 5

<item name="colorPrimaryDark">@color/your_color</item> 

будет отображаться только в Lollipop и больше, чем Lollipop (API). Постскриптум вам необходимо иметь Theme.AppCompat в качестве основной/основной темы

Ответ 6

изменение цвета строки состояния доступно только для Android выше леденец

1. Вы можете изменить цвет строки состояния программно этой строкой:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    getWindow().setStatusBarColor(ContextCompat.getColor(context, R.color.your_color));
}

2. Вы можете сделать это с плавной анимацией перехода:

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    int startColor = getWindow().getStatusBarColor();
    int endColor = ContextCompat.getColor(context, R.color.your_color);
    ObjectAnimator.ofArgb(getWindow(), "statusBarColor", startColor, endColor).start();
}

3. или вы можете добавить это к вашему стилю темы в файле values /styles.xml. Элемент colorPrimaryDark будет использоваться для цвета строки состояния вашего приложения

<item name="colorPrimaryDark">@color/colorPrimaryDark</item>