У меня есть такой код:

Notification notif;

// Build notification
Notification.Builder notifBuilder = new Notification.Builder(context);
notifBuilder.setContentIntent(pendingIntent);
notifBuilder.setContentTitle(title);
notifBuilder.setSmallIcon(icon_resId);
notifBuilder.setContentText(ne.getCaption());
notifBuilder.setDefaults(Notification.DEFAULT_ALL);
notifBuilder.setAutoCancel(autocancel);
notifBuilder.setWhen(System.currentTimeMillis());
notif = notifBuilder.build();

И отлично работает в Android 4.4.

Однако в Android 5.0 значок, отображаемый в строке состояния, представляет собой белый квадрат. Значок, отображаемый в новом «теле уведомления», которое появляется, когда устройство заблокировано, является правильным.

В http://developer.android.com/reference/android/app/Notification.Builder.html, я не вижу ничего нового о значках уведомлений в API уровня 21

66
Borja 28 Ноя 2014 в 15:28
Здравствуйте, вы нашли решение? У меня такая же проблема. Я пробовал с другим значком, но та же проблема все еще возникает.
 – 
Seb83
1 Дек 2014 в 13:09
2
Я решил изменить размер значка на 16x16 пикселей и использовать только белый цвет.
 – 
Borja
1 Дек 2014 в 14:53

8 ответов

Лучший ответ

Я решил изменить размер значка на 16x16 пикселей и использовать только белый цвет.

32
Borja 1 Дек 2014 в 14:54
3
Вы не заметили, что все уведомления замаскированы белым в леденце? Чтобы использовать хорошие иконки в леденцах, вы должны использовать иконку с заметной формой. Все цвета будут переведены в белый цвет, поэтому прозрачность обязательна.
 – 
Dion Segijn
1 Дек 2014 в 15:12
Полный размер актива изображения должен быть 72 * 72 в пределах оптического квадрата 66 * 66 для правильного отображения. См. petrnohejl.github.io/Android-Cheatsheet-For-Graphic- Дизайнеры
 – 
SavageKing
16 Мар 2015 в 13:05
Это отличный ресурс, но он не был обновлен для Lollipop. В частности, размеры значков уведомлений больше не масштабируются правильно по сравнению с приложениями Google. Насколько я могу судить, они используют значок 80x80 в изображении 96x96 для xxxhdpi.
 – 
Sterling
19 Апр 2015 в 06:45
Что значит использовать только белый цвет? так что ваш маленький значок ПРОСТО белый квадрат или что????
 – 
Boris Gafurov
4 Окт 2017 в 23:46

Посмотрите документацию: http://developer.android.com/design/style/iconography.html.

Есть слова: «Значки уведомлений должны быть полностью белыми. Также система может уменьшать и / или затемнять значки».

33
porlicus 4 Дек 2014 в 09:07
5
Документация изменилась: google.com/design/spec/patterns/notifications.html. «Сделать непрозрачным белым, используя только альфа-канал».
 – 
Ben
15 Окт 2015 в 21:19
4
Ни ссылка от porlicus, ни от Ben в настоящее время ничего не говорят о спецификациях маленьких значков.
 – 
JoeMjr2
29 Май 2017 в 01:49
Доступна архивная версия здесь
 – 
caw
15 Мар 2021 в 06:56

Как указано в разделе «Уведомления» об изменении поведения Android 5.0 на сайте разработчиков Android:

Уведомления отображаются с темным текстом поверх белого (или очень светлого) фона, чтобы соответствовать новым виджетам материального дизайна. Убедитесь, что все ваши уведомления выглядят правильно с новой цветовой схемой. Если ваши уведомления выглядят неправильно, исправьте их:

Используйте setColor (), чтобы установить цвет акцента в круге за изображением значка. Обновите или удалите ресурсы, содержащие цвет. Система игнорирует все неальфа-каналы в значках действий и в значке основного уведомления. Вы должны предполагать, что эти значки будут только альфа-версиями. Система рисует значки уведомлений белым цветом, а значки действий - темно-серым.

http://developer.android.com/about/versions/android-5.0 -changes.html.

4
bummi 19 Фев 2015 в 23:23

Дубликат: значок панели уведомлений становится белым в Android 5 Lollipop

Вкратце:

Обновление Android 5: https://developer.android.com/about/versions/android- 5.0-changes.html Уведомления -> Стиль дизайна материалов

Обновите или удалите ресурсы, содержащие цвет. Система игнорирует все неальфа-каналы в значках действий и в значке основного уведомления. Вы должны предполагать, что эти значки будут только альфа-версиями. Система рисует значки уведомлений белым цветом, а значки действий - темно-серым.

Можно установить цвет фона маленького значка с помощью (по умолчанию серый):

Notification.Builder#setColor(int)
4
Community 23 Май 2017 в 15:10

Добавьте это в свой манифест -

 <meta-data android:name="com.google.firebase.messaging.default_notification_icon"
    android:resource="@drawable/ic_notification" />
3
A J 18 Авг 2018 в 13:00

Любой, кто все еще смотрит на это, самый простой способ заставить ваш значок правильно отображаться - сначала отрисовать его с помощью Android Icon Studio здесь:

https://romannurik.github.io/AndroidAssetStudio/icons-notification.html

Разархивируйте файлы из загруженного zip-архива в свой проект / основную папку, чтобы они поместились в соответствующие папки drawable-xxxx.

Затем, чтобы изменить цвет в уведомлении, используйте что-то вроде этого:

NotificationCompat.Builder builder = new NotificationCompat.Builder(context, CHANNEL_ID)
    .setSmallIcon(R.drawable.ic_notification_appicon) // <-- Icon from Android Icon Studio 
    .setColor(context.getColor(R.color.holo_blue))    // <-- Set your preferred icon colour to appear in the notification dropdown list
    .setContentTitle("Title")
    .setContentText("Content")
    .setAutoCancel(true)
    .setCategory(NotificationCompat.CATEGORY_EVENT)
    .setDefaults(Notification.DEFAULT_ALL)
    .setPriority(NotificationCompat.PRIORITY_DEFAULT);
2
James Semaj 25 Апр 2019 в 06:46

В Android 5.0 значок, отображаемый в строке состояния, представляет собой белый квадрат из-за 5.0 Lollipop «Значки уведомлений должны быть полностью белыми» .

Вы можете легко найти эти типы значков на значке материала. Посетите: https://material.io/icons/.

Google также предлагает использовать собственный цвет, который будет отображаться за белым значком уведомления с помощью метода setColor().

Для получения дополнительной информации посетите: https://developer.android.com/about /versions/android-5.0-changes.html

0
Aashish Kumar 22 Мар 2018 в 18:47

Удалите android:targetSdkVersion="21" из manifest.xml. это будет работать!

-3
CopsOnRoad 25 Фев 2019 в 21:41
76
Это не решение, это плохой способ пойти против системы.
 – 
SagiLow
24 Янв 2015 в 19:21
Есть ли решения с версией android:targetSdkVersion="21" в файле манифеста?
 – 
John
15 Май 2015 в 17:11
3
@john, нет, но настройка android:targetSdkVersion="19" тоже отлично работает. Всем остальным: я не совсем понимаю неприязнь к этому ответу. Проблема в основном в том, что «Lollipop не хочет делать вещи так, как я хочу их делать». Таким образом, логически ваш выбор: принять леденец или не нацеливаться на леденец.
 – 
netsplit
16 Июн 2015 в 20:41
2
Почему targetSdkVersion был в manifest.xml в первую очередь? Эти вещи должны быть установлены в build.gradle.
 – 
IgorGanapolsky
2 Окт 2015 в 17:53
Это решение не сработает. даже остановить уведомление в SDK версии 21 или выше.
 – 
Mohsin
23 Фев 2016 в 11:03