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

У меня есть приложение, показывающее настраиваемые уведомления. Проблема в том, что при работе в Android 5 маленький значок на панели уведомлений отображается белым цветом. Как я могу это исправить?


person Alejandro Casanova    schedule 07.02.2015    source источник
comment
У Рахула Шармы и Басиама есть лучший ответ здесь - stackoverflow.com/questions/30795431/   -  person Rivu Chakraborty    schedule 24.10.2016
comment
У меня такое бывает при работе на Android 6, а не 5.   -  person Jaime Montoya    schedule 06.04.2017
comment
Конечно, это происходит с Android 5+, конечно, также с Android 6 и 7. К моменту возникновения вопроса Android 5 был последней версией, а функция, вызывающая эту проблему, была представлена ​​в Android 5.   -  person Alejandro Casanova    schedule 06.04.2017
comment
Я думаю, что точнее будет сказать API Level 21 (Android 5.0), API Level 22 (Android 5.1), API Level 23 (Android 6.0) и т. Д. Термин Android 5 неоднозначен, потому что вы можете говорить об Android 5.0 или Android. 5.1, и когда я тестировал уведомления и способ отображения значков в API Level 22 Vs. API уровня 23, я понял, что они ведут себя по-разному.   -  person Jaime Montoya    schedule 07.04.2017


Ответы (20)


Принятый ответ не является (полностью) правильным. Конечно, он заставляет значки уведомлений отображаться в цвете, но делает это с БОЛЬШИМ недостатком - устанавливая целевой 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.

Например:

Notification notification = new Notification.Builder(context)
            .setAutoCancel(true)
            .setContentTitle("My notification")
            .setContentText("Look, white in Lollipop, else color!")
            .setSmallIcon(getNotificationIcon())
            .build();

    return notification;

И в методе getNotificationIcon:

private int getNotificationIcon() {
    boolean useWhiteIcon = (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP);
    return useWhiteIcon ? R.drawable.icon_silhouette : R.drawable.ic_launcher;
}
person Daniel Saidi    schedule 23.03.2015
comment
targetSdkVersion! = maxSdkVersion = ›Если вы не используете новые API, представленные в Lollipop, это не проблема. Приложение будет работать без проблем. (Конечно, вы должны следовать рекомендациям по дизайну и подумать о том, чтобы в будущем переключиться на белый значок) - person ByteHamster; 23.03.2015
comment
Да, я имел в виду именно это, но вы правы в том, что мой текст был несколько неясным. Я изменил этот раздел и надеюсь, что его легче понять. Спасибо! - person Daniel Saidi; 23.03.2015
comment
Как создать силуэт? Я разработчик без навыков фотошопа, и если сделать фон прозрачным с помощью онлайн-инструментов, значки все равно будут белыми. - person Chaitanya; 02.07.2015
comment
@Chaitanya Используйте GIMP :) - person ByteHamster; 11.07.2015
comment
Я пробую setLargeIcon + setSmallIcon и вижу белый значок - person ; 19.10.2015
comment
не могли бы вы дать мне действующий значок? Пробовал квадратный белый значок, на 5.0 тоже не работает. мой адрес электронной почты [email protected] thx - person Allen Vork; 19.05.2016
comment
это решение не отвечает на вопрос, почему процесс сборки Android изменяет совершенно правильный PNG, сжимает его и удаляет альфа-канал. - person philk; 18.06.2016
comment
developer.android.com/design/style/iconography.html приводит к material.google.com/style/icons.html и когда я нажимаю ctrl+f и набираю notification на этой странице он ничего не может найти ... - person user25; 17.09.2016
comment
У меня есть GIMP, но у меня нет навыков создания силуэтов. Что я могу сделать? - person Romulus Urakagi Ts'ai; 17.03.2017
comment
У меня есть файл icon.png размером 72 x 72 с белым фоном и моим логотипом поверх этого белого фона. Насколько я понимаю, вместо моего icon.png я должен использовать icon_sil Silhouette.png, который был бы файлом с прозрачностью вместо белого фона, а мой логотип располагался бы поверх прозрачного фона. Это верно? - person Jaime Montoya; 17.03.2017
comment
Я читаю следующее на developer.android.com/about/versions/ android-5.0-changes.html: система игнорирует все неальфа-каналы в значках действий и в значке основного уведомления. Вы должны предполагать, что эти значки будут только альфа-версиями. Итак, в основном вместо моего icon.png (файл PNG с белым фоном и без прозрачности) я должен сгенерировать файл icon_sil Silhouette.png (файл PNG с прозрачностью вместо белого фона), и это должно решить проблему, правильно? - person Jaime Montoya; 17.03.2017
comment
вместо проверки из кода модификатора версии платформы приложения в папку с возможностью рисования - drawable / drawable-v21 и поместите соответствующий значок - person Igor; 21.03.2017
comment
У меня в уведомлении белый логотип с прозрачным фоном. Все версии hdpi и xhdpi правильного размера, созданные с помощью упомянутого онлайн-инструмента, но уведомление исчезает, когда другое приложение превращает панель уведомлений в белый цвет. Значок моего уведомления не меняется - он по-прежнему белый, но все остальные меняют цвет на темно-серый, чтобы стать видимыми. Есть идеи, что я делаю не так? - person controlbox; 20.11.2017
comment
Это новое руководство по значкам уведомлений от Google. - person soshial; 05.07.2018
comment
Очень полезно. Я трачу целый день, чтобы решить эту проблему в части кодирования. Но актуальной проблемой является иконка силуэта. Большое спасибо. - person Pooja; 02.10.2019
comment
Существуют заархивированные версии рекомендации по значкам и изменения Android 5 (уровень API 21) - person caw; 15.03.2021

Полностью согласен с пользователем Daniel Saidi. Чтобы иметь Color для NotificationIcon я пишу этот ответ.

Для этого вам нужно сделать иконку типа Silhouette и сделать какой-нибудь раздел Transparent, куда вы хотите добавить свой Colors. т.е.

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

Вы можете добавить свой цвет, используя

.setColor(your_color_resource_here)

ПРИМЕЧАНИЕ. setColor доступен только в Lollipop, поэтому вам нужно проверить OSVersion

if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
    Notification notification = new Notification.Builder(context)
    ...
} else {
    // Lollipop specific setColor method goes here.
    Notification notification = new Notification.Builder(context)
    ...
    notification.setColor(your_color)
    ...            
}

Вы также можете добиться этого, используя Lollipop в качестве цели SDK.

Все инструкции относительно NotificationIcon приведены в Строках руководства по уведомлениям консоли разработчика Google.

Предпочтительный размер значка уведомления 24x24dp

mdpi    @ 24.00dp   = 24.00px
hdpi    @ 24.00dp   = 36.00px
xhdpi   @ 24.00dp   = 48.00px

Также перейдите по этой ссылке, чтобы получить дополнительную информацию о размерах значков уведомлений.

person Jaydipsinh Zala    schedule 03.04.2015
comment
это очень хорошая идея для установки цвета фона как notification.setColor (your_color_resource_here) - person TejaDroid; 04.04.2015
comment
Итак, я пробовал это, и значок уведомления имеет цветной фон, когда я опускаю оттенок уведомления. Но в самом трее по-прежнему белый значок - person Stealth Rabbi; 22.01.2016
comment
это решение правильное ... имейте значок уведомления с прозрачной задней панелью ... и по силуэту значок не обязательно должен быть только черным ... значок может иметь цвета; просто Android L будет преобразовывать цвет в белый ... и предыдущие версии Android будут отображать значок, как он есть - person Lakshay; 09.06.2016
comment
Я добавляю setColor для леденца на палочке ниже, показывающего значок ic_launcher в порядке, но в 6.0, показывающий белый квадратный значок, пожалуйста, помогите мне - person Harsha; 16.11.2016
comment
Я тестировал setColor на Kitkat (API 19) и IceCreamSandwich (API 15), в обоих случаях цвет игнорировался, но не происходил сбой. Так можно ли не проверять версию ОС? - person Maria; 08.08.2017

Это код, который Android использует для отображения значков уведомлений:

// android_frameworks_base/packages/SystemUI/src/com/android/systemui/
//   statusbar/BaseStatusBar.java

if (entry.targetSdk >= Build.VERSION_CODES.LOLLIPOP) {
    entry.icon.setColorFilter(mContext.getResources().getColor(android.R.color.white));
} else {
    entry.icon.setColorFilter(null);
}

Поэтому вам нужно установить для целевой версии sdk значение <21, и значки останутся цветными. Это уродливый обходной путь, но он делает то, что от него ожидается. В любом случае, я действительно рекомендую следовать Руководству по дизайну от Google: «Значки уведомлений должны быть полностью белыми»

Вот как это можно реализовать:

Если вы используете Gradle / Android Studio для создания своих приложений, используйте build.gradle:

defaultConfig {
    targetSdkVersion 20
}

В противном случае (Eclipse и т. Д.) Используйте AndroidManifest.xml:

<uses-sdk android:minSdkVersion="..." android:targetSdkVersion="20" />
person ByteHamster    schedule 07.02.2015
comment
Есть ли обходной путь? Или что я могу сделать, чтобы правильно отобразить этот или любой другой значок? - person Alejandro Casanova; 08.02.2015
comment
Я отредактировал свой ответ, так как нашел обходной путь после прочтения исходного кода Android. - person ByteHamster; 08.02.2015
comment
Большое спасибо за вашу помощь, но, пожалуйста, предоставьте мне некоторый контекст. Где мне это делать? Что такое вход? - person Alejandro Casanova; 08.02.2015
comment
Код был взят из AOSP, чтобы показать, как я нашел обходной путь :) Я добавил небольшое объяснение того, как его реализовать. - person ByteHamster; 08.02.2015
comment
Это действительно работает. Есть догадки, зачем Google это сделал? Это ошибка или особенность? - person m02ph3u5; 27.02.2015
comment
@ m02ph3u5: похоже, что он предназначен для соображений совместимости (например, дайте разработчикам приложений время добавить новый белый значок). В любом случае этот метод может не работать в более новых версиях Android. На мой взгляд, вы должны следовать рекомендациям по дизайну Google и использовать белые значки. - person ByteHamster; 27.02.2015
comment
@ByteHamser белые иконки? Он вообще не показывает никаких значков, только белый кружок. - person m02ph3u5; 28.02.2015
comment
Он отображает силуэт вашего значка. Вы должны создать иконку с уникальным силуэтом. - person ByteHamster; 28.02.2015
comment
Как настроить целевой SDK, чтобы ваше приложение НЕ компилировалось для решения Android Lollipop? - person Daniel Saidi; 23.03.2015
comment
@meh: Да, они решили, что белые иконки лучше подходят для Material Design. Нет никакой гарантии, что мой ответ продолжит работать в более поздних версиях Android, поэтому вам следует подумать о создании специального значка. - person ByteHamster; 15.04.2015
comment
Понижение целевой версии не влияет на приложение? - person Munib; 19.07.2017
comment
Да, это влияет на приложение. Вот почему я заявил, что это уродливый обходной путь, и предложил не делать этого таким образом. Как вы могли заметить, этому ответу более двух лет. Тогда это было подходящим решением, чтобы получить больше времени для создания белых активов. Сегодня тебе больше не следует этого делать. - person ByteHamster; 19.07.2017

Чтобы значки уведомлений не стали белыми, используйте для них значки «Силуэт», т.е. белые на прозрачном фоне изображения. Вы можете использовать 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 Романа Нурика.

person Thomas H. Schmidt    schedule 16.07.2015
comment
Я попытался преобразовать свой значок с помощью Photoshop, но у меня ничего не вышло, но, будучи поклонником irfanview, я быстро попробовал это, когда увидел его, и он отлично сработал. Спасибо! - person Bruce; 23.08.2015

Другой вариант - использовать каталоги с возможностью рисования для конкретных версий (mipmap) для предоставления различной графики для Lollipop и более поздних версий.

В моем приложении каталоги «v21» содержат значки с прозрачным текстом, в то время как другие каталоги содержат непрозрачную версию (для версий Android старше Lollipop).

Файловая система

Это должно выглядеть примерно так:

Android Studio

Таким образом, вам не нужно проверять номера версий в коде, например

PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent,
            PendingIntent.FLAG_ONE_SHOT);

Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
        .setSmallIcon(R.mipmap.ic_notification)
        .setContentTitle(title)
        .setContentText(message)
        .setAutoCancel(true)
        .setSound(defaultSoundUri)
            .setContentIntent(pendingIntent);

Точно так же вы можете ссылаться на «ic_notification» (или как бы вы его ни называли) в своей полезной нагрузке GCM, если вы используете атрибут «icon».

https://developers.google.com/cloud-messaging/http-server-ref#notification-payload-support

person Ian    schedule 23.03.2016
comment
Это работает и выглядит как наиболее подходящее для Android решение. - person Sergey Galin; 04.04.2016
comment
Вы говорите, что если Android выберет значок из папки mipmap-21, если версия - леденец, а если меньше, чем леденец, он выберет из папки с возможностью рисования? - person Lakshay; 08.06.2016
comment
@Ian, подход каталогов хорош для ресурсов для каждой версии Android, но как вы можете таким образом установить setColor (без использования дополнительного кода)? - person Daniel; 28.05.2018
comment
Цвета @Daniel также могут находиться в каталогах, зависящих от версии, например ценности и ценности-v21. - person Ian; 29.05.2018

Теперь студия Android предоставляет плагин Image Asset, который будет генерировать значок во всех необходимых папках drawbale.

Image Asset Studio помогает создавать значки различных типов с разной плотностью и показывает, где именно они будут размещены в вашем проекте. Он включает в себя инструменты для настройки ваших значков и добавления фонов, при этом результат отображается на панели предварительного просмотра, поэтому они выглядят именно так, как вы планировали. Эти инструменты могут значительно упростить процесс создания и импорта значков.

Вы можете получить доступ к объекту изображения, нажав «Создать»> «Выбрать объект изображения», и появится следующее окно: -

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

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

person Nishchal    schedule 31.12.2016

В соответствии с рекомендациями по дизайну Android вы должны использовать силуэт для builder.setSmallIcon(R.drawable.some_notification_icon);. Но если вы все же хотите отображать красочный значок в качестве значка уведомления, вот трюк для леденца на палочке и выше, используйте приведенный ниже код. LargeIcon будет действовать как основной значок уведомления, и вам также необходимо предоставить силуэт для smallIcon, поскольку он будет отображаться в правом нижнем углу largeIcon.

if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
{
     builder.setColor(context.getResources().getColor(R.color.red));
     builder.setSmallIcon(R.drawable.some_notification_icon);
     builder.setLargeIcon(BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher));
}

А pre-lollipop используйте только .setSmallIcon(R.mipmap.ic_launcher) с вашим конструктором.

person Muhammad Babar    schedule 25.08.2016

Я столкнулся с той же проблемой, потому что значок уведомления моего приложения не был плоским. Для леденца на палочке версии Android или даже ниже леденца значок вашего приложения должен быть плоским, не используйте значок с тенями и т. Д.

Ниже приведен код, который отлично работал на всех версиях Android.

private void sendNotification(String msg) {

    NotificationManager mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE);

    Intent intent = new Intent(this, CheckOutActivity.class);

    PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, 0);

    NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(
            this).setSmallIcon(R.drawable.ic_notification)
            .setContentTitle(getString(R.string.app_name))
            .setStyle(new NotificationCompat.BigTextStyle().bigText(msg))
            .setContentText(msg).setLights(Color.GREEN, 300, 300)
            .setVibrate(new long[] { 100, 250 })
            .setDefaults(Notification.DEFAULT_SOUND).setAutoCancel(true);

    mBuilder.setContentIntent(contentIntent);
    mNotificationManager.notify(new Random().nextInt(), mBuilder.build());
}

Неправильный значок
введите описание изображения здесь

Правый значок

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

person Nauman Zubair    schedule 07.04.2015
comment
Где именно вы здесь решаете проблему? - person IgorGanapolsky; 03.05.2016
comment
Как создать правую иконку. Можно онлайн сгенерировать? любой инструмент ?? - person Jiks; 02.07.2016
comment
@Jiks Да, вот ссылка - person Muhammad Sohaib Ayub; 11.12.2016

альфа-канал - это единственные данные изображения, которые Android использует для значков уведомлений:

  • alpha == 1: пиксели отображаются белым
  • alpha == 0: пиксели отображаются цветом, выбранным вами в Notification.Builder#setColor(int)

Это упоминается на странице https://developer.android.com/about/versions/android-5.0-changes.html:

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

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

Notification.Builder.setColor(Color.RED)
                    .setSmallIcon(android.R.drawable.star_on)

но я все еще ищу документ API, официально подтверждающий это.

Проверено на Android 22.

person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 08.02.2016
comment
Я тестировал setColor на Kitkat (API 19) и IceCreamSandwich (API 15), в обоих случаях цвет игнорировался, но не происходил сбой. Так можно ли не проверять версию ОС? - person Maria; 08.08.2017
comment
@JohnLee Я не думаю, что это может привести к сбою, только может выглядеть плохо, если вы не примете это во внимание :-) - person Ciro Santilli 新疆再教育营六四事件ۍ 08.08.2017

удалите android:targetSdkVersion="21" из manifest.xml. это будет работать! и из этого в вашем apk нет никаких проблем, это просто трюк, я применяю это, и я нашел красочный значок в уведомлении

person Bhanu Sharma    schedule 15.07.2015
comment
Совершенно плохая идея поиграть с системой! Не выход! - person sud007; 01.04.2016

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

До API 21 (Lollipop 5.0) цветные значки работают. Вы можете заставить свое приложение ориентироваться на API 20, но это ограничивает функции, доступные вашему приложению, поэтому это не рекомендуется. Вы можете протестировать работающий уровень API и соответствующим образом установить либо цветной значок, либо значок в градациях серого, но это, вероятно, не имеет смысла. В большинстве случаев лучше использовать значок в оттенках серого.

Изображения имеют четыре канала, RGBA (красный / зеленый / синий / альфа). Для значков уведомлений Android игнорирует каналы R, G и B. Учитывается только канал Alpha, также известный как непрозрачность. Создайте свой значок с помощью редактора, который дает вам контроль над альфа-значением цветов вашего рисунка.

Как значения Alpha создают изображение в оттенках серого

  • Альфа = 0 (прозрачный) - эти пиксели прозрачны, показывая цвет фона.
  • Альфа = 255 (непрозрачный) - эти пиксели белые.
  • Альфа = 1 ... 254 - Эти пиксели являются именно тем, что вы ожидаете, обеспечивая оттенки между прозрачным и белым.

Замена с помощью setColor:

  • # P6 #
    # P7 #
    # P8 #
person Jeremy Frank    schedule 25.01.2017

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

Вы можете подробно узнать, как это сделать, на скриншотах здесь https://blog.clevertap.com/fixing-notification-icon-for-android-lollipop-and-above/

надеюсь, это поможет

person Rohit Khanna    schedule 15.04.2016

Вам необходимо импортировать одноцветное прозрачное изображение PNG. Таким образом, вы можете установить цвет значка для маленького значка. В противном случае он будет отображаться белым на некоторых устройствах, таких как MOTO.

person abhi.nalavade    schedule 07.02.2019

Если вы используете GoogleFireBaseMessaging, вы можете установить «id значка» в полезной нагрузке «уведомления» (это помогает мне решить проблему с белой полосой):

{
    "to":"<fb_id>",
    "priority" : "high",
    "notification" : 
    {
        "title" : "title",
        "body" : "body" ,
        "sound" : "default",
        "icon" : "ic_notification"
    }
}

установите ic_notification на свой собственный идентификатор из R.drawable.

person Maxim Firsoff    schedule 15.07.2016
comment
Где вы разместили этот значок? Все, что я получаю, - это значок моего приложения, и все файлы R.drawable, которые я нахожу, являются файлами двоичных классов. - person shinzou; 12.08.2017
comment
@kuhaku, он имеет в виду файл ic_launcher.png в папке "drawable". - person Johnson; 02.09.2017

Я также столкнулся со слишком большим количеством проблем, но после поиска по всему Интернету я нашел разные решения этой проблемы. Позвольте мне подвести итог всем решениям и объяснить:

Примечание. Это решение предназначено для пользователей Phonegap Cordova.

  1. Пример

<preference name="android-targetSdkVersion" value="20"/>

Вам необходимо установить значение android-targetSdkVersion меньше 21. Таким образом, после установки этого значения изображение значка уведомления будет отображаться до Android 6 (Marshmallow), оно не будет работать в Android 7 (Nougat). Это решение сработало для меня.

  1. Измените statusbarStyle в своем файле конфигурации. Пример

<preference name="StatusBarStyle" value="lightcontent" />

Но это решение будет работать только тогда, когда ваше приложение открыто. Итак, я думаю, это решение не лучшее решение, но оно сработало для многих пользователей.

  1. Сделайте ваш значок прозрачным. Это решение сработало для многих. На самом деле дело в том, что при разработке собственного приложения нам необходимо предоставить им три изображения: (a) значок приложения (b) значок уведомления (c) изображение значка строки состояния, но в случае разработки гибридного мобильного приложения нет возможности Сделай так. Так что сделайте свой значок прозрачным, и это решение решит вашу проблему.

И я уверен, что одно из вышеперечисленных решений подойдет для вашей проблемы.

person Rinku kumar    schedule 10.02.2017

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

'largeIcon' => 'ic_launcher',
'smallIcon' => 'ic_launcher' // defaults to ic_launcher, 
person phil    schedule 04.07.2017

Думаю, говорить об API 21 уже поздно, но я нашел простой способ.

При использовании 'Custom Notification (custom layout)' s,

RemoteView's

setImageViewResource(int viewId, int srcId);

а также

setImageViewUri(int viewId, Uri uri); 

делает это изображение белым на Lollipop (API 21).

Но при использовании

setImageViewBitmap(int viewId, Bitmap bitmap);

Изображение не покрывается белой маской!

person LimeCake    schedule 18.01.2019

Согласно документации, начиная с Android 3.0 (API Level 11), значок уведомления должен быть белым:

https://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar

«Значки в строке состояния состоят из простых белых пикселей на прозрачном фоне с альфа-смешением, используемым для гладких краев и внутренней текстуры, где это необходимо».

person Laurent    schedule 23.05.2019

смешайте эти две вещи в приложении Gradle

 defaultConfig {
    applicationId "com.example.abdulwahidvi.notificationproblem"
    minSdkVersion 16
    //This is the version that was added by project by default
    targetSdkVersion 26 <------ default
    // Changed it to version 20
    targetSdkVersion 20 <------ mine

    versionCode 1
    versionName "1.0"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
person wahid    schedule 08.08.2017

android:targetSdkVersion="20" должно быть ‹21.

person Hemanth Dvshkk    schedule 18.02.2015
comment
Пожалуйста, не следуйте этому решению, оно может работать, но за счет запуска ваших приложений в режиме совместимости с более новыми версиями Android. - person king_below_my_lord; 26.07.2017