通知图标,在某些设备上是全白的,在其他设备上是彩色的。为啥?
Posted
技术标签:
【中文标题】通知图标,在某些设备上是全白的,在其他设备上是彩色的。为啥?【英文标题】:Notification icons, fully white on some devices, multicolored on others. Why?通知图标,在某些设备上是全白的,在其他设备上是彩色的。为什么? 【发布时间】:2018-05-15 12:40:24 【问题描述】:我的问题不在于如何创建白色图标。
我只是想了解自动白色滤镜何时启动。
我已经阅读了通知图标,从 Lollipop 开始,它会自动变成白色的“剪影”,所以即使你使用带有setSmallIcon
的多色图像,它的任何不透明部分在状态显示时都会变成全白吧。
这正是它在我从 android studio 开始的每个 nexus/pixel 模拟器上实际所做的。任何 android 版本,在 5、6、7、8 中,都会这样做。
但实际上直到最近我才发现这个棒棒糖功能,因为一直以来,甚至现在,通过在真实设备上加载完全相同的应用程序,我总是看到原始的多色状态栏中的图像。这发生在三星 s5neo、华为 p8lite 和许多其他设备上。
我问过我的用户,显然有些人认为他们是白色的,有些人认为他们是彩色的。一些奥利奥的人看到它们是白色的,一些奥利奥的人看到它们是彩色的。这似乎还取决于我使用的特定图标,因为有些用户报告说他们在同一台设备上看到,其中一些是白色的,一些是彩色的。
我与setSmallIcon
一起使用我的ic_launcher
,因此从资源中应用它,或者从我从外部来源获得的一些Drawables 创建的Icon
对象。
而且我使用像素化的字符精灵作为图标,所以当我说彩色时,我并不是指“绿色的东西”,而是指真正彩色的图像。
我的应用有 sdk target 27,它还使用了一些 oreo 功能。
那么,发生了什么事?我到处读到它应该在任何 >=lollipop 设备上做剪影,但这显然不是所有关于它的知识,我想更好地理解。 例如,如果我的 sdk 目标为 27,我的 oreo 用户如何才能看到使用 setSmallIcon 设置的彩色图像? 有人可以解释吗?谢谢!
【问题讨论】:
如果您在 API 21 或更高版本上运行您的应用程序,那么它只会在通知中显示彩色图标。 @nirmal 说的行为发生在 android 5、6、7 和 8 上,所有这些 是 API 21 或更高版本等同于 android 5 , 6 , 7 和 8。见developer.android.com/guide/topics/manifest/… @nirmal 是的,我知道。但是从 api 21 开始,图标应该会自动转换为白色。你说的不是相反吗? 【参考方案1】:使用白色像素和 alpha 通道创建通知图标,as documented,您将获得一致的结果。
一些设备制造商对 Android 进行了修补。显然,对于某些人来说,修补包括支持非标准通知图标。您无法提前确切知道哪些设备(超过 10,000 种型号)会有这种行为。
如果设备制造商雇用您构建应用程序,或希望从您那里获得应用程序许可,您可以询问他们的通知图标政策并进行调整以利用他们提供的任何东西。
【讨论】:
感谢您的回答。即使可能无法确切知道哪些设备,我也很想看看一些例子。就我而言,彩色图标实际上效果更好。所以我想了解如何检测差异,所以我可以尽可能使用原始的彩色图像,否则可以使用特别准备的剪影图像。 @LukeB.:你已经知道一些例子——你在你的问题中列出了它们。我不确定你还在寻找什么。 对不起,你是对的。这个答案是否有来源,以验证它确实是由于制造商的修补,还是只是您基于个人经验的假设? (并不是说我不会相信你的假设,这听起来很有效。只是收集信息。) @LukeB.:“这个答案是否有来源?”——嗯,我怀疑任何制造商都有一些网页描述他们在其 Android 操作系统版本中所做的每一项更改。 “这只是你根据个人经验的假设吗?” ——毫无疑问,制造商对 Android 进行了修补。关于 SO 的数千个问题和答案,以及无数关于制造商变更的文章,都证明了这一点。关于通知图标,您的问题似乎包含您寻求的证据。所以,再说一次,我不确定你还想要什么。以上是关于通知图标,在某些设备上是全白的,在其他设备上是彩色的。为啥?的主要内容,如果未能解决你的问题,请参考以下文章