Изменение фона значка уведомлений на 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