我使用这个简单的代码在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());
我的问题是:
启动通知后,“The Ticker”文本旁边会显示一个裁剪的超大小图标,而不会显示原始的SmallIcon,而不会过大。
在下拉列表中,我看到左边的LargeIcon,这很好。但是我也会在通知时间旁边看到右边的小图标。我不想表明这一点。
答案 0 :(得分:29)
在我的应用程序中,我提供了大型(128x128像素)PNG drawable作为小图标,它显示缩放和没有裁剪。您的drawable是在位图文件中定义还是作为XML资源定义的?在XML中,您可以指定显示的几个方面(例如裁剪)。仔细检查您的XML或仅使用PNG / JPG。
正如Android API documentation on Notification.setSmallIcon()明确指出:
设置小图标资源,该资源将用于表示状态栏中的通知。展开视图的平台模板将在左侧绘制此图标,除非还指定了大图标,在这种情况下,小图标将移动到右侧。
AFAIK除非您提供自己的通知模板(通过Notification.setContent()
,否则您无法覆盖此行为答案 1 :(得分:15)
围绕这个奇怪的实现有一种方法。而不是使用setLargeIcon
使用此:
Notification notification=notificationBuilder.build()
notification.contentView.setImageViewResource(android.R.id.icon, R.drawable.your_large_icon);
答案 2 :(得分:9)
我猜这是预期的行为。
您应该检查您的小图标是否符合图标大小的UX准则。小图标限制为24x24dp。
展开通知的默认行为是同时显示大图标和小图标。我不确定是否有办法摆脱小图标,但为什么这很重要?
答案 3 :(得分:1)
就我而言,我只是将红色图标设置为大图标,将setColor设置为Color.WHITE,并将白色图标设置为我的小图标。这样,在通知区域中,我的红色图标显示,白色图标“消失”。
Bitmap icon = BitmapFactory.decodeResource(getResources(),R.drawable.app_logo);
mBuilder.setContentIntent(resultPendingIntent).setColor(Color.WHITE).setLargeIcon(icon);
答案 4 :(得分:-1)
在我的情况下,我没有在所有文件夹中放置图标图像(xhdpi,hdpi,mdpi,ldpi)。