为什么我的通知小图标总是变成灰色?

46

我试图制作一个小的图标,大小正好为16x16像素,灰度图,只有灰色和白色(灰色的hex值为616161),以创建我的应用程序图标的轮廓。

但无论如何,在通知中它总是显示为白/灰色的正方形。我做错了什么?

(我的最低api为21,假设这是相关的)


1
更改 mini API 为 20。 - Naveen Tamrakar
1
我宁愿不更改我的最低API,因为那样我会失去其他地方我所依赖的某些功能。 - user8367195
@Phát Phát说得对,你的通知图标背景图片必须是透明色。 - MinnuKaAnae
请查看此处描述的 Android 5(API 级别 21)中的更改:[http://web.archive.org/web/20150207071452/https://developer.android.com/about/versions/android-5.0-changes.html#BehaviorNotifications],并阅读此处解释的指南:[http://web.archive.org/web/20150209195038/http://developer.android.com/design/style/iconography.html#notification]。 - caw
3个回答

93

请点击此链接

首先,让我们了解一下以下Android文档:

"更新或删除涉及颜色的资源。系统忽略动作图标和主要通知图标中的所有非 Alpha 通道。您应该假设这些图标仅为 Alpha。系统以白色绘制通知图标,以深灰色绘制动作图标。"

现在这很容易被忽视,我看到很多应用程序在应用商店上线并拥有成千上万的用户,但他们没有遵循上述指南。

所以,让我详细解释一下如何在几个步骤中将您的通知图标转换为适用于Android的图标。

在您喜爱的图像编辑器中打开图标文件。将图像中不想显示的所有部分转换为透明像素。所有颜色和不透明像素都会显示为白色。让我们通过一个示例来了解一下。

输入图像描述

编辑后:感谢 @Andrey Patseiko 提供的工具


@nhp,您能否更新一下您提到的工具链接?它是格式错误的。 - Chisko
Android 的官方指南可以在这里找到该图标的相关信息:http://web.archive.org/web/20150209195038/http://developer.android.com/design/style/iconography.html#notification - caw
我使用了PNG格式的logo而不是SVG格式,对我来说起作用了。 - Saiful Islam Sajib

9

对于通知,您需要针对不同版本的Android使用不同的图标:

Notification notification = new Notification.Builder(context)
                .setAutoCancel(true)
                .setContentTitle("My notification")
                .setContentText("Look, white in Lollipop, else color!")
                .setSmallIcon(getNotificationIcon())
                .build();
    return notification;

根据版本获取通知图标

private int getNotificationIcon() {
    boolean useWhiteIcon = (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP);
    return useWhiteIcon ? R.drawable.icon_silhouette : R.drawable.ic_launcher;
}

这与我的问题无关,我的API将始终为>= LOLLIPOP,问题是在该条件下出现的白色图标。 - user8367195
你需要为不同的版本创建两个不同的图标。对于 >= LOLLIPOP 版本,你需要创建一个透明的图标,并使用白色颜色。 - Aj 27
看一下 @Phát Phát 的答案,你就会有一个想法。 - Aj 27

9
除了新功能和能力外,Android 5.0 还包括各种系统更改和 API 行为更改。请参见通知行为更改

通知使用黑色文本,位于白色(或非常浅的)背景上以匹配新的 Material Design 小部件。确保所有通知都符合新的颜色方案。如果您的通知看起来不正确,请进行以下更改:

  • 使用 setColor() 在图标图像后设置一个带有强调颜色的圆形。
  • 更新或删除涉及颜色的资源。系统忽略动作图标和主要通知图标中的所有非 Alpha 通道。您应该假定这些图标仅为 Alpha。系统会在白色中绘制通知图标,在暗灰色中绘制操作图标。

因此,基本上您必须使用 轮廓 图标作为 API Level 21+ 的通知图标。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接