Колір значків панелі стану Android


131

Мені було цікаво, чи можна змінити колір значків панелі статусу ( не колір панелі статусу colorPrimaryDark). введіть тут опис зображення Скажімо, я хочу, щоб ця панель стану:
<item name="colorPrimaryDark">@android:color/white</item>

і значки чорного кольору, чи це можливо?

Дякую.

Редагувати:

Нове у попередньому перегляді розробника M: windowLightStatusBar. Увімкнувши це у своїй темі, система повідомляє використовувати темний передній план, корисний для яскравих кольорових смуг стану. Зауважте, що в попередньому перегляді M, схоже, є помилка, коли піктограми сповіщень залишаються білими, тоді як піктограми статусу системи правильно змінюються на напівпрозорі чорні.

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

Відповіді:


24

Не з Lollipop. Починаючи з Android 5.0, вказівки говорять:

Піктограми сповіщень повинні бути повністю білими.

Навіть якщо їх немає, система розгляне лише альфа-канал вашого значка, зробивши їх білими

Обхід

Єдиний спосіб мати кольорову піктограму на Lollipop - знизити targetSdkVersionзначення до значень <21, але, думаю, вам краще дотримуватися вказівок і використовувати лише білі значки.

Якщо ви все ж вирішите, що хочете кольорові піктограми, ви можете використовувати метод DravableCompat.setTint з нової бібліотеки підтримки v4.


3
Я здійснив пошук в Google, і я не зміг знайти належний шлях до цього, але якщо в інструкціях Android сказано, що іконки повинні бути білими, білими, це :) Дякую!
GuilhE

11
Для цього має бути кращий шлях. Кілька комерційних додатків там використовують кольори. Це жахливо ідіотичний хід дизайну від Google. Про що вони знову думали, якщо взагалі?
not2qubit

Якщо ви подивитеся на додаток новин Google, у них немає білих значків рядка стану: play.google.com/store/apps/…
Адам Гурвіц,

6
<item name="android:windowLightStatusBar">true</item>працював на мене.
Адам Гурвіц

Цікаво, чому додаток Gmail (як вийшов у 2019-04) забарвлює рядок стану білим, а піктограми / текст темно-сірим.
Даніель Ф

201

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

<item name="android:windowLightStatusBar">true</item>

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


2
але колір піктограм елементів меню все ще білий, як змінити колір піктограм пункту меню на чорний?
Mateen Chaudhry

107

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

Приємне рішення! Це було дуже зручно для моєї програми, оскільки мені не довелося міняти версію SDK.
Vitor Braga

2
правильніше: decorView.setSystemUiVisibility (decorView.getSystemUiVisibility () | View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);
Антон Савенок

Це врятувало мені день! Дякую @ywwynm!
ReGaSLZR

Це найкраще рішення, працює також на телефонах MI. Ти рятівник!
Numanqmr

що таке PleaseChangeStatusBarTintDark будь ласка ??
Ібрамазін

48

якщо у вас рівень API менший за 23, ви повинні використовувати його таким чином. він працював для мене, декларуючи це під v21 / style .

<item name="colorPrimaryDark" tools:targetApi="23">@color/colorPrimary</item>
        <item name="android:windowLightStatusBar" tools:targetApi="23">true</item>

1
Ви маєте на увазі 23. :(
meditat

Ні, я мав на увазі v21 / Style, якщо ви про це не знаєте, будь ласка, відвідайте це посилання. stackoverflow.com/questions/28465064/creating-styles-v21-xml
Ritesh

Навіть якщо він розміщений у styles.xml з кваліфікатором v21, це працює лише на пристроях, на яких працює api 23 та вище. Насправді AS Lint виділяє ці елементи попередженням, вказуючи, що вони будуть ігноровані на версіях Android, які не підтримують його. tools:targetApi="23"Частина говорить Lint , щоб придушити це попередження.
Subaru Tashiro

5

Установка windowLightStatusBarдля trueне працює з телефонами Мі, деякі телефони Meizu, Blackview телефони, WileyFox і т.д. Я знайшов такий хак для Мі і Meizu пристроїв. Це не всебічне вирішення цієї проблематики, але, можливо, воно буде комусь корисним.

І я думаю, було б краще сказати своєму покупцеві, що кольоровий рядок забарвлення (наприклад) в білий - не дуже гарна ідея. замість використання різних хакків було б краще визначити відповідний colorPrimaryDarkвідповідно до вказівок


-3

Так, ви можете це змінити. але в api 22 і вище, використовуючи NotificationCompat.Builder і setColorized (true):

NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(context, context.getPackageName())
                .setContentTitle(title)
                .setContentText(message)
                .setSmallIcon(icon, level)
                .setLargeIcon(largeIcon)
                .setContentIntent(intent)
                .setColorized(true)
                .setDefaults(0)
                .setCategory(Notification.CATEGORY_SERVICE)
                .setVisibility(NotificationCompat.VISIBILITY_PUBLIC)
                .setPriority(NotificationCompat.PRIORITY_HIGH);

Ти впевнений? Документація говорить "Коли встановлено, набір кольорів з setColor (int) буде використовуватися як колір фону цього повідомлення". та "Для більшості стилів забарвлення буде застосовано лише в тому випадку, якщо сповіщення призначене для сповіщення служби переднього плану". Здається, неможливо змінити колір переднього плану піктограми.
Домінік

Це лише для сповіщень переднього плану та стосується лише елемента сповіщення, а не піктограми сповіщення.
Subaru Tashiro
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.