Цвет значков панели состояния Android

Мне было интересно, можно ли изменить цвет значков в строке состояния ( не цвет colorPrimaryDark , colorPrimaryDark ) введите описание изображения здесь Предположим, я хочу, чтобы эта строка состояния была:
@android:color/white

и значки в черном, это возможно?

Благодарю.

РЕДАКТИРОВАТЬ:

Новое в предварительном представлении M: windowLightStatusBar. Перевернув это в своей теме, вы увидите, что система использует темный передний план, полезный для светлых полос состояния. Обратите внимание, что в предварительном просмотре M есть ошибка, в которой значки уведомлений остаются белыми, а значки состояния системы корректно меняются на полупрозрачный черный.

от: Роман Нурик введите описание изображения здесь

Не с Lollipop. Начиная с Android 5.0, в руководствах говорится:

icons уведомлений должны быть полностью белыми.

Даже если это не так, система будет рассматривать только альфа-канал вашего значка, делая их белыми

Временное решение

Единственный способ иметь цветной значок на Lollipop заключается в том, чтобы снизить значение targetSdkVersion до значений <21 , но я думаю, что вам лучше следовать рекомендациям и использовать только белые значки.

Если вы все же решите, что хотите цветные значки, вы можете использовать метод DrawableCompat.setTint из новой библиотеки поддержки v4.

Да, это можно изменить на серый (без пользовательских цветов), но это работает только с API 23 и выше, вам нужно только добавить это в свои значения-v23 / styles.xml

 true 

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

@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); } } 

если у вас уровень API меньше 23, чем вы должны использовать его таким образом. это работало для меня, объявляя это под v21 / style .

 @color/colorPrimary true 

Установка windowLightStatusBar на true не работает с телефонами Mi, некоторыми телефонами Meizu, телефонами Blackview, WileyFox и т. Д. Я нашел такой хак для устройств Mi и Meizu. Это не исчерпывающее решение этой проблемы, но, возможно, это было бы полезно кому-то.

И я думаю, было бы лучше сказать вашему клиенту, что строка состояния окраски (например) белая – это не очень хорошая идея. вместо использования разных хаков было бы лучше определить соответствующий colorPrimaryDark соответствии с рекомендациями

Interesting Posts

org.apache.http.entity.FileEntity устарел в Android 6 (Marshmallow)

выставлять и увеличивать событие дочернего элемента управления в usercontrol в c #

Как мы можем показать индикатор выполнения для загрузки с помощью FtpWebRequest

Подмножество и ggplot2

Как использовать функцию рисования NSString для создания UIImage из текста

Слишком много ссылок на поле: 70613; max – 65536

Как отправить одну команду на несколько ПК по локальной сети (linux)

Как установить PreProcessorDefinitions как задачу для задачи msbuild

Как заставить Vim выделить символы без ascii?

Плавная прокрутка на Android

как получить MAC-адрес клиента, который просматривает веб-сайт asp.net mvc c #

Создают ли браузеры новые TCP-соединения для каждого HTTP-запроса?

Невозможно установить Windows 7 Share из Linux с помощью CIFS: Ошибка монтирования (13): разрешение отклонено

DataTrigger, где значение НЕ равно нулю?

Google Firebase выйдет и забудет пользователя в Android-приложении

Давайте будем гением компьютера.