У меня есть приложение, показывающее пользовательские уведомления. Проблема в том, что при работе в Android 5 маленький значок на панели уведомлений отображается белым цветом. Как я могу это исправить?
android
android-notifications
android-5.0-lollipop
Алехандро Казанова
источник
источник
Ответы:
Принятый ответ не является (полностью) правильным. Конечно, это заставляет значки уведомлений отображаться в цвете, но делает это с большим недостатком - устанавливая целевой SDK ниже, чем Android Lollipop!
Если вы решите проблему с белым значком, установив для целевого SDK значение 20, как предлагается, ваше приложение не будет ориентировано на Android Lollipop, что означает, что вы не можете использовать функции, специфичные для Lollipop.
Взгляните на http://developer.android.com/design/style/iconography.html , и вы увидите, что белый стиль - это способ отображения уведомлений в Android Lollipop.
В Lollipop Google также предлагает использовать цвет, который будет отображаться за (белым) значком уведомления - https://developer.android.com/about/versions/android-5.0-changes.html
Поэтому я считаю, что лучшим решением будет добавить значок силуэта в приложение и использовать его, если устройство работает под управлением Android Lollipop.
Например:
И в методе getNotificationIcon:
источник
ctrl+f
и печатаюnotification
на этой странице, он ничего не может найти ...Полностью согласен с пользователем Daniel Saidi. Для того чтобы иметь
Color
для этогоNotificationIcon
я пишу этот ответ.Для этого вы должны сделать иконку похожей
Silhouette
и создать раздел,Transparent
где бы вы ни хотели добавить свойColors
. т.е.Вы можете добавить свой цвет, используя
.setColor(your_color_resource_here)
ПРИМЕЧАНИЕ:
setColor
доступно только в,Lollipop
так что вы должны проверитьOSVersion
Вы также можете достичь этого, используя
Lollipop
в качестве целиSDK
.Все инструкции относительно
NotificationIcon
даны в Руководстве по уведомлению консоли разработчика .Предпочтительный размер значка уведомления 24x24dp
А также обратитесь к этой ссылке для размеров значков уведомлений для получения дополнительной информации.
источник
setColor
Kitkat (API 19) и IceCreamSandwich (API 15), в обоих случаях он игнорировал цвет, но не падал . Так что я могу безопасно пропустить проверку версии ОС?Этот код Android использует для отображения значков уведомлений:
Таким образом, вам нужно установить целевую версию SDK на что-то,
<21
и значки будут оставаться цветными. Это уродливый обходной путь, но он делает то, что от него ожидают. В любом случае, я действительно рекомендую следовать Руководству по дизайну Google : «Значки уведомлений должны быть полностью белыми».Вот как вы можете это реализовать:
Если вы используете Gradle / Android Studio для создания своих приложений, используйте
build.gradle
:В противном случае (Eclipse и т. Д.) Используйте
AndroidManifest.xml
:источник
Чтобы значки уведомлений не стали белыми, используйте для них значки «Силуэт», т.е. белые на прозрачном фоне изображения. Вы можете использовать Irfanview, чтобы построить их:
IrfanView
, нажмите F12 для инструментов рисования, при необходимости очистите рисунок (удалите ненужные детали, выровняйте и отполируйте)Image / Decrease Color Depth
до 2 (для черно-белой картинки)Image / Negative
(для черно-белого изображения)Image / Resize/Resample
до 144 x 144 (используйте метод размера «Resize», а не «Resample», в противном случае изображение снова увеличивается до 24 цветных бит на пиксель (24 BPP))File / Save as PNG
, проверьтеShow option dialog
, проверьтеSave Transparent Color
, нажмитеSave
, затем нажмите на черный цвет на изображении, чтобы установить прозрачный цветAndroid, кажется, использует только разрешение изображения drawable-xxhdpi (144 x 144), поэтому скопируйте полученный
ic_notification.png
файл в\AndroidStudio\Projects\...\app\src\main\res\drawable-xxhdpi
. Используйте.setSmallIcon(R.drawable.ic_notification)
в своем коде или используйтеgetNotificationIcon()
как Даниэль Саиди, предложенный выше.Вы также можете использовать Android Asset Studio Романа Нурика .
источник
Другой вариант - воспользоваться каталогами для рисования (mipmap), зависящими от версии, для предоставления различной графики для Lollipop и выше.
В моем приложении каталоги "v21" содержат значки с прозрачным текстом, в то время как другие каталоги содержат непрозрачную версию (для версий Android, более старых, чем Lollipop).
Который должен выглядеть примерно так:
Таким образом, вам не нужно проверять номера версий в коде, например
Аналогично, вы можете ссылаться на «ic_notification» (или как вы его называете) в полезной нагрузке GCM, если вы используете атрибут «icon».
https://developers.google.com/cloud-messaging/http-server-ref#notification-payload-support
источник
setColor
(без использования дополнительного кода) таким образом?В соответствии с рекомендациями по дизайну Android вы должны использовать силуэт для
builder.setSmallIcon(R.drawable.some_notification_icon);
Но, если вы все еще хотите отобразить цветной значок в качестве значка уведомления, здесь есть хитрость для леденцов и выше, используйте приведенный ниже код. LargeIcon будет выступать в качестве основного значка уведомления, и вам также нужно будет указать силуэт для smallIcon, так как он будет показан в правом нижнем углу LargeIcon.И предварительно леденец использовать только
.setSmallIcon(R.mipmap.ic_launcher)
с вашим строителем.источник
Теперь в Android Studio есть плагин Image Asset , который будет генерировать иконку во всех необходимых папках drawbale.
Image Asset Studio помогает вам создавать различные типы значков с различной плотностью и показывает, где именно они будут размещены в вашем проекте. Он включает в себя инструменты для настройки ваших значков и добавления фонов, все при отображении результата на панели предварительного просмотра, чтобы они выглядели точно так, как вы планировали. Эти инструменты могут значительно упростить процесс создания и импорта иконок.
Вы можете получить доступ к Image Asset , щелкнув новый> щелкните по опции Image Asset, и это будет окно показа, как это: -
источник
Я столкнулся с той же проблемой, и это было из-за того, что значок уведомления моего приложения не был плоским. Для леденца на андроид версии или даже ниже леденца на палочке значок уведомления вашего приложения должен быть плоским, не используйте значок с тенями и т. Д.
Ниже приведен код, который отлично работал на всех версиях Android.
Неправильный значок
Правая иконка
источник
Альфа-канал - это единственные данные изображения, которые Android использует для значков уведомлений:
alpha == 1
: пиксели показывают белыйalpha == 0
: пиксели отображаются как выбранный вами цветNotification.Builder#setColor(int)
Это упоминается по адресу https://developer.android.com/about/versions/android-5.0-changes.html :
Кажется, что почти все встроенные элементы рисования подходят для этого, поэтому вы можете использовать что-то вроде:
но я все еще ищу документацию API, которая официально подтверждает это.
Проверено на Android 22.
источник
setColor
Kitkat (API 19) и IceCreamSandwich (API 15), в обоих случаях он игнорировал цвет, но не падал . Так что я могу безопасно пропустить проверку версии ОС?удалить
android:targetSdkVersion="21"
из файла manifest.xml. это сработает! и от этого нет никаких проблем в вашем apk, это просто трюк, я применяю это, и я нашел красочный значок в уведомленииисточник
Уведомления серого цвета как описано ниже. Они не черно-белые, несмотря на то, что написали другие. Возможно, вы видели значки с несколькими оттенками, например, шкалы силы сети.
До API 21 (Lollipop 5.0) работали цветные значки. Вы можете принудительно настроить ваше приложение на API 20, но это ограничивает возможности, доступные для вашего приложения, поэтому это не рекомендуется. Вы можете проверить работающий уровень API и соответственно установить либо цветную иконку, либо иконку в оттенках серого, но это, вероятно, не стоит. В большинстве случаев лучше всего использовать значок в оттенках серого.
Изображения имеют четыре канала RGBA (красный / зеленый / синий / альфа). Для значков уведомлений Android игнорирует каналы R, G и B. Единственный канал, который учитывается, это Альфа, также известный как непрозрачность. Создайте свой значок с помощью редактора, который дает вам контроль над альфа-значением цветов вашего рисунка.
Как альфа-значения генерируют серое изображение:
Изменяя это с
setColor
:Вызов
NotificationCompat.Builder.setColor(int argb)
. Из документации дляNotification.color
:Мое тестирование с использованием setColor показывает, что компоненты Alpha не игнорируются; вместо этого они все еще предоставляют оттенки серого. Более высокие значения Alpha окрашивают пиксель в белый цвет. Более низкие значения альфа-канала превращают пиксель в цвет фона (черный на моем устройстве) в области уведомлений или в указанный цвет в раскрывающемся уведомлении. (Кажется, другие сообщали о несколько ином поведении, так что будьте внимательны!)
источник
После выхода Android Lollipop релиз Android изменил правила отображения значков уведомлений в панели уведомлений. Официальная документация гласит: «Обновляйте или удаляйте ресурсы, связанные с цветом. Система игнорирует все не-альфа-каналы в значках действий и в основном значке уведомлений. Следует учитывать, что эти значки будут только в альфа-формате. Система отображает значки уведомлений белым цветом. и значки действий темно-серого цвета ». Теперь, что это означает в терминах непрофессионала: «Преобразуйте все части изображения, которые вы не хотите показывать, в прозрачные пиксели. Все цвета и непрозрачные пиксели отображаются белым »
Вы можете увидеть, как сделать это подробно со скриншотами здесь https://blog.clevertap.com/fixing-notification-icon-for-android-lollipop-and-above/
надеюсь, это поможет
источник
Вам необходимо импортировать одноцветное прозрачное изображение PNG. Таким образом, вы можете установить цвет значка маленького значка. В противном случае он будет показан белым на некоторых устройствах, таких как MOTO
источник
Если вы используете GoogleFireBaseMessaging, вы можете установить «идентификатор значка» в полезной нагрузке «уведомления» (это помогает мне решить проблему с иконкой белой полосы):
установите ic_notification для вашего собственного идентификатора из R.drawable.
источник
Я также столкнулся со слишком многими проблемами в этом, но после поиска по всему интернету я нашел различные решения для этой проблемы. Позвольте мне суммировать все решения и объяснить:
Примечание. Это решение предназначено для пользователей PhoneGap Cordova.
<preference name="android-targetSdkVersion" value="20"/>
Вам нужно установить значение android-targetSdkVersion меньше 21. Поэтому после установки этого значения изображение значка уведомления будет отображаться до Android 6 (Marshmallow), оно не будет работать в Android 7 (Nougat). Это решение сработало для меня.
<preference name="StatusBarStyle" value="lightcontent" />
Но это решение будет работать только тогда, когда ваше приложение открыто. Итак, я думаю, что это решение не лучшее решение, но оно работало для многих пользователей.
И я уверен, что одно из приведенных выше решений будет работать для вашей проблемы.
источник
К вашему сведению: если значок не отображается, убедитесь, что в вашей локальной или удаленной конфигурации уведомлений указано правильное имя значка, т.е.
источник
Я думаю, что уже слишком поздно говорить об API 21, но я нашел простой способ.
При использовании пользовательских уведомлений (пользовательский макет),
RemoteView-х
и
делает эти изображения белыми на Lollipop (API 21).
Но при использовании
Изображение не становится белой маской!
источник
Согласно документации, значок уведомления должен быть белым начиная с Android 3.0 (API Level 11) :
https://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar
источник
смешать эти две вещи в приложении Gradle
источник
android:targetSdkVersion="20"
это должно быть <21
.источник