【问题标题】:NotificationCompat 4.1 SetSmallIcon and SetLargeIconNotificationCompat 4.1 SetSmallIcon 和 SetLargeIcon
【发布时间】:2012-12-12 19:39:15
【问题描述】:

我使用这个简单的代码在 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,这很好。但我也看到右侧的小图标,在通知时间旁边。我不想表现出来。

【问题讨论】:

  • 我在解决这个问题时遇到了困难,您能否澄清一下有什么必要?接受的答案并没有完全告诉我该怎么做
  • @AndrewBullock - builder.setSmallIcon(0); 对你有用吗?它应该在使用大图标时禁用小图标。
  • 为什么不直接设置全透明图片文件?

标签: android notifications icons


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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 不错的把戏。它绕过了小图标和大图标交互的机制,只是在构建通知后修改了 imageview。
    • 已弃用。但显然您可以改用 NotificationCompat.Builder.setCustomContentView(RemoteViews)。
    【解决方案3】:

    我猜这是预期的行为。

    您应该检查您的小图标是否符合图标大小的 UX 指南。小图标限制为 24x24dp。

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

    【讨论】:

    • 这很重要,因为我的应用程序是唯一一个在时间旁边显示小图标的应用程序。
    • 我在我的应用程序中修复了这个问题,方法是使用我一直以来使用的同一个大图标,并将我的小图标缩小到 24x24dp(例如 24 x 24 像素)。非常感谢您提供这张尺寸的便条,因为我在其他任何地方都看不到它。
    • 用户体验指南在哪里?
    【解决方案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)中放置图标图像。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-05-05
        • 1970-01-01
        相关资源
        最近更新 更多