it-swarm.com.ru

NotificationCompat 4.1 SetSmallIcon и SetLargeIcon

Я использовал этот простой код для установки уведомлений в 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());

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

  1. При запуске уведомления рядом с текстом «Тикер» отображается обрезанный крупный значок Small Icon, вместо того, чтобы показывать исходный SmallIcon без его увеличения .enter image description here

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

36
Ton
  1. В моем приложении я предоставляю большой (128x128 px) PNG, который можно нарисовать как маленький значок, и он показывает масштабированный и без обрезки. Определен ли ваш объект в растровом файле или, может быть, как ресурс XML? В XML вы можете указать несколько аспектов отображения (например, обрезка). Дважды проверьте ваш XML или используйте только PNG/JPG.

  2. As документация по Android API для Notification.setSmallIcon () четко гласит:

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

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

29
Jerzyna

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

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

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

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

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

9
Joe Malin

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

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

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