Цвет значков панели состояния Android
Мне было интересно, можно ли изменить значок значков значка < < цвет , colorPrimaryDark
).
Скажем, я хочу, чтобы эта строка состояния была:
<item name="colorPrimaryDark">@android:color/white</item>
и значки в черном, возможно ли это?
Спасибо.
EDIT:
Новое в предварительном просмотре M: windowLightStatusBar. Перевернув это в вашей теме говорится, что система использует темный передний план, полезный для более светлые полоски состояния. Обратите внимание, что у предварительного просмотра M есть ошибка где значки уведомлений остаются белыми, а значки состояния системы правильно измените на полупрозрачный черный.
from: Роман Нурик Google+ post
![введите описание изображения здесь]()
Ответы
Ответ 1
Не так как Lollipop. Начиная с Android 5.0, в руководствах говорится:
Значки уведомлений должны быть полностью белыми.
Даже если это не так, система будет рассматривать альфа-канал вашего значка, делая их белыми
Обход
Единственный способ иметь цветной значок на Lollipop - это уменьшить targetSdkVersion
до значений <21
, но я думаю, что вам лучше следовать рекомендациям и использовать только белые значки.
Если вы все же решите, что хотите цветные значки, вы можете использовать метод DrawableCompat.setTint из новой библиотеки поддержки v4.
Ответ 2
Да, можно изменить его на серый (без пользовательских цветов), но это работает только с API 23 и выше, вам нужно только добавить это в свои значения-v23/styles.xml
<item name="android:windowLightStatusBar">true</item>
![введите описание изображения здесь]()
Ответ 3
@eOnOe ответил, как мы можем изменить оттенок строки состояния через xml. Но мы можем также динамически изменять его в коде:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
View decor = getWindow().getDecorView();
if (shouldChangeStatusBarTintToDark) {
decor.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
} else {
// We want to change tint color to white again.
// You can also record the flags in advance so that you can turn UI back completely if
// you have set other flags before, such as translucent or full screen.
decor.setSystemUiVisibility(0);
}
}
Ответ 4
если уровень API меньше 23, чем вы должны использовать его таким образом.
это работало для меня, объявляя это под v21/style.
<item name="colorPrimaryDark" tools:targetApi="23">@color/colorPrimary</item>
<item name="android:windowLightStatusBar" tools:targetApi="23">true</item>