Подтвердить что ты не робот

NotificationCompat 4.1 SetSmallIcon и SetLargeIcon

Я использовал этот простой код для установки Notification в Android 4.1 или новее. Он работает хорошо, но моя проблема связана с SmallIcon и LargeIcon. Я понимаю, что SmallIcon отображается в строке состояния, а LargeIcon отображается в раскрывающемся списке.

NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
builder.setTicker("The ticker");
builder.setContentTitle("The title");
builder.setContentText("The text");
builder.setSmallIcon(R.drawable.my_small_icon);
Bitmap bm = BitmapFactory.decodeResource(getResources(), R.drawable.my_96px_large_icon);
builder.setLargeIcon(bm);       
NotificationManager nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
nm.notify("direct_tag", NOTIF_ALERTA_ID, builder.build());

Моя проблема:

  • При запуске уведомления на экране рядом с текстом "Тикер" отображается уменьшенный негабаритный значок "Маленькая", вместо того, чтобы показывать оригинальный SmallIcon без его увеличения. enter image description here

  • В раскрывающемся списке я вижу LargeIcon слева, это хорошо. Но я также вижу маленькую иконку справа, рядом со временем уведомления. Я не хочу это показывать. enter image description here

4b9b3361

Ответ 1

  • В моем приложении я предоставляю большой (128x128 пикселей) PNG, как маленький значок, и он показывает масштабирование и без обрезки. Является ли ваш drawable определенным в растровом файле или, возможно, XML-ресурсом? В XML вы можете указать несколько аспектов отображения (например, обрезка). Дважды проверьте свой XML или используйте только PNG/JPG.

  • Как Документация API Android на Notification.setSmallIcon() четко заявляет:

    Установите маленький ресурс значка, который будет использоваться для представления уведомления в строке состояния. Шаблон платформы для расширенного представления рисует этот значок слева, если не указан большой значок, , в этом случае маленький значок будет перемещен в правую сторону.

AFAIK нет способа переопределить поведение, если вы не предоставите свой собственный шаблон уведомления (через Notification.setContent()

Ответ 2

Есть путь вокруг этой странной реализации. Вместо использования setLargeIcon используйте это:

Notification notification=notificationBuilder.build()
notification.contentView.setImageViewResource(android.R.id.icon, R.drawable.your_large_icon);

Ответ 3

Я бы предположил, что это ожидаемое поведение.

Вы должны проверить, что ваш маленький значок соответствует рекомендациям UX для размера значка. Маленькие значки ограничены 24x24dp.

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

Ответ 4

В моем случае я просто установил свой красный значок как большой значок и setColor для Color.WHITE и установил белый значок в качестве моей маленькой иконки. Таким образом, в области уведомлений отображается красный значок, а белый значок "отменен".

Bitmap icon = BitmapFactory.decodeResource(getResources(),R.drawable.app_logo);

mBuilder.setContentIntent(resultPendingIntent).setColor(Color.WHITE).setLargeIcon(icon);

Ответ 5

В моем случае я не размещал значок изображения во всех папках (xhdpi, hdpi, mdpi, ldpi).