通知图标在一些设备上完全是白色的,在另一些设备上则是彩色的。为什么?

7

我的问题不是关于如何创建白色图标。

我只是想了解何时自动白色滤镜会触发。

我读过通知图标,从棒棒糖(Lollipop)开始,自动变成白色的“剪影”,因此,即使您使用带有setSmallIcon的多彩图像,其中任何非透明部分在状态栏中显示时都会完全变为白色。

这正是我在从android studio启动的每个nexus/pixel模拟器上看到的实际情况。在5、6、7、8等任何安卓版本中都是如此。

但是,直到最近我才发现这个棒棒糖特性,因为整个时间里,甚至现在,在真正的设备上加载完全相同的应用程序时,我始终在状态栏中看到原始的多彩图像。这在三星s5neo、华为p8lite和许多其他手机上都发生。

我问了我的用户,显然有些人看到它们是白色的,而有些人则看到它们是彩色的。一些用奥利奥(Oreo)的人看到它们是白色的,而另一些用奥利奥的人看到它们是彩色的。似乎这也取决于我使用哪个特定图标,因为一些用户报告说他们在完全相同的设备上看到其中一些是白色的,而另一些则是彩色的。

我使用setSmallIcon和我的ic_launcher,所以从资源中应用它,或者从一些来自外部源的Drawable创建Icon对象。 我将人物像素图像用作图标,因此当我说彩色时,我并不是指“绿色的东西”,而是真正多彩的图像。

我的应用程序目标sdk版本为27,同时使用一些奥利奥功能。

那么,发生了什么事?我到处都看到它应该在任何>=棒棒糖(Lollipop)设备上做剪影,但显然这还不是全部内容需要了解的,我想更好地理解。 例如,如果我有sdk目标为27,则我的奥利奥用户如何看到使用setSmallIcon设置的多彩图像? 请有人解释一下吗?谢谢!


如果您的应用程序在API 21或更高版本上运行,则通知中才会显示彩色图标。 - Nirmal Prajapat
@nirmal 说这种行为发生在安卓5、6、7和8上,所有这些版本都有。 - Luke B.
是的,API 21或更高版本相当于Android 5、6、7和8。请参见https://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels。 - Nirmal Prajapat
@nirmal 是的,我知道。但是从api 21开始,图标应该自动转换为白色。你不是在说相反的吗? - Luke B.
1个回答

3
使用白色像素和 alpha 通道创建您的通知图标 (如文档所述),就可以获得一致的结果。某些设备制造商会对 Android 进行改动。对于某些设备制造商来说,这种调整包括支持非标准通知图标。您事先没有好的方法知道哪些设备(超过 10,000 种型号之一)会出现这种情况。如果设备制造商聘请您构建应用程序或希望从您处许可应用程序,则可能会询问他们的通知图标政策并进行调整以利用他们提供的任何东西。

谢谢你的回答。虽然准确了解哪些设备支持可能是不可能的,但我很想看到一些例子。对于我的情况来说,彩色图标实际上效果更好。所以我想了解如何检测差异,这样我就可以尽可能使用原始的彩色图像,否则就使用特别准备的轮廓图像。 - Luke B.
@LukeB.:你已经知道了一些例子——你在问题中列出了它们。我不确定你还在寻找什么。 - CommonsWare
抱歉,你是对的。有没有来源证实这个答案确实是由于制造商的改动,还是只是基于个人经验的假设?(并不是说我不相信你的假设,听起来足够合理。只是在收集信息。) - Luke B.
@LukeB.:“这个答案有来源吗?”——我怀疑任何制造商都没有一些网页来描述他们在Android操作系统版本中所做的每一个更改。“这只是你基于个人经验的假设吗?”——毫无疑问,制造商会对Android进行调整。这里有成千上万的问题和答案,以及无数关于制造商更改的文章,这些都是证明。关于通知图标,你的问题似乎包含了你所寻求的证据。所以,我不确定你还想要什么。 - CommonsWare

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