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. 通知启动后,在“The Ticker”文本旁边会显示一个裁剪过的小图标,而不是显示SmallIcon的原始大小而不会过大。 在这里输入图像说明

  2. 在下拉列表中,我看到左边的LargeIcon,这很好。 但是我也看到通知时间旁边的小图标。 我不想表明这一点。 在这里输入图像说明

  1. 在我的应用程序中,我提供大的(128×128像素)PNG绘图作为小图标,并显示缩放和不裁剪。 您的drawable是在位图文件中定义还是作为XML资源定义的? 在XML中,您可以指定显示的几个方面(例如裁剪)。 仔细检查你的XML或只使用PNG / JPG。

  2. 由于Notification.setSmallIcon()上的Android API文档明确指出:

    设置小图标资源,用于在状态栏中表示通知。 展开视图的平台模板将在左侧绘制此图标,除非还指定了大图标, 在这种情况下,小图标将移动到右侧

除非您提供自己的通知模板(通过Notification.setContent()) ,否则AFAIK无法覆盖该行为

有一个解决这个奇怪的实现的方法。 而不是使用setLargeIcon使用这个:

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

我猜这是预期的行为。

你应该检查你的小图标是否符合用户图标大小的UX准则。 小图标被限制为24x24dp。

展开通知的默认行为是显示大图标和小图标。 我不确定是否有办法摆脱小图标,但为什么这很重要?

在我的情况下,我只是将我的红色图标设置为大图标,将setColor设置为Color.WHITE,并将白色图标设置为我的小图标。 这样,在通知区域,我的红色图标显示,白色图标“消失”。

 Bitmap icon = BitmapFactory.decodeResource(getResources(),R.drawable.app_logo); mBuilder.setContentIntent(resultPendingIntent).setColor(Color.WHITE).setLargeIcon(icon); 

在我的情况下,我没有在所有文件夹(xhdpi,hdpi,mdpi,ldpi)中放置图标图像。