Почему мой smallIcon для уведомлений всегда выделяется серым цветом?

Я попытался сделать маленький значок ровно 16x16, серо-масштабированный, ничего, кроме серого и белого (серый цвет hex значение 616161), чтобы создать силуэт значка моего приложения.

Тем не менее, независимо от того, что оно отображается только как белый/серый квадрат в уведомлениях. Что я делаю неправильно?

(Мой min api равен 21, если он имеет значение)

Ответ 1

Перейдите по этой ссылке

Сначала давайте разберемся с документацией по Android, которая выглядит следующим образом:

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

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

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

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

enter image description here

РЕДАКТИРОВАНИЕ: Спасибо @Andrey Patseiko за инструмент tool

Ответ 2

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

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

Получить значок уведомления на основе версии

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

Ответ 3

Наряду с новыми функциями и возможностями Android 5.0 включает в себя множество изменений в системе и изменения поведения API. Pl. перейдите в изменения поведения уведомлений.

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

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

Итак, в основном вы должны использовать значки silhouette в качестве значка уведомления для уровня API уровня 21 +