NotificationCompat 4.1 SetSmallIcon和SetLargeIcon

时间:2012-12-12 19:39:15

标签: android notifications icons

我使用这个简单的代码在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,而不会过大。 enter image description here

  2. 在下拉列表中,我看到左边的LargeIcon,这很好。但是我也会在通知时间旁边看到右边的小图标。我不想表明这一点。 enter image description here

5 个答案:

答案 0 :(得分:29)

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

  2. 正如Android API documentation on Notification.setSmallIcon()明确指出:

      

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

  3. 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)。