Изменение фона значка уведомлений на Lollipop


79

Я просматривал шаблон проектирования уведомлений и не нашел ничего, что говорило бы о фоне значка уведомлений. Как вы, наверное, заметили, для пользовательских уведомлений есть только светло-серый фон. Но такие приложения, как Hangouts или просто уведомление об отладке по USB, имеют собственный цвет фона значка уведомления.

Есть ли возможность изменить этот серый цвет на что-нибудь другое? (программный цвет этого конкретного круга)

Посмотреть картинку


может быть у них есть специальный значок с зеленым фоном?
— Ахмед Хегази

Не уверен, что это все еще важно для кого-то, но начиная с Android 6.1 появился новый флаг «NotificationCompat.Builder.setColorized (boolean colorize)», который позволяет изменять «серый фон» уведомления.
— Тобиас Райх

Ответы:


158

1) Получить цвет

int color = 0xff123456;
int color = getResources().getColor(R.color.my_notif_color);
int color = ContextCompat.getColor(context, R.color.my_notif_color);

2) Установите цвет для уведомления

NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
...
builder.setColor(color);
Notification notif = builder.build();

Цвет соблюдается только на Lollipop и влияет только на фон маленькой иконки . Если отображается большой значок, ответственность за его содержание полностью лежит на вас.

Источник: NotificationCompat.Builder # setColor (int)


11
Согласно этому: stackoverflow.com/a/27023679/327011 setColor изменит только цвет маленького значка. Осторожно.
— neteinstein

5
1) Это работает только на LOLLIPOP. 2) Это не влияет на изображение, предоставленное вами в setLargeBitmap. Он только окрашивает фон маленькой иконки.
— Eugen Pechanec

@AlexVPerl, вы можете попробовать мое решение чуть ниже этого комментария
— satyapol

1
"setColor" - правильный ответ, ЕСЛИ ВЫ НЕ УСТАНАВЛИВАЕТЕ БОЛЬШОЙ ЗНАЧОК. У вас будет маленький большой значок с my_notif_color в качестве фона, маленького значка не будет. протестировано на android 6.0
— Loda

У меня проблема, я установил значок зеленого цвета, но при появлении уведомления он автоматически меняется на белый.
— HUSNAIN SARWAR

10

если вы определили цвет в colors.xml, тогда в вашем NotificationBuilder добавьте значение как

.setColor(getResources().getColor(R.color.<YOUR_COLOR>))

Это должно решить вашу проблему. Это влияет только на фон значка.


У меня проблема, я установил значок зеленого цвета, но при появлении уведомления он автоматически меняется на белый.
— HUSNAIN SARWAR

3

getColor(int) устарел Resources

Теперь мы должны использовать одну из этих альтернатив:


У меня проблема, я установил зеленый цвет значка, но когда появляется уведомление, он автоматически меняется на белый ..
— HUSNAIN SARWAR

Если вы используете сплошной цвет, старый метод отлично подойдет.
— Eugen Pechanec

все еще белая квадратная иконка только в 6.0, но до 5.0 appicon fine
— Harsha
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.