使用android.support.v7.app.NotificationCompat.MediaStyle
构建的非自定义通知在Android Marshmallow上的对比度非常低。 (这在Lollipop和Nougat上都很好。)
图。 1,在棉花糖上,从应用程序外部,其下拉通知在深色背景上有浅色文字:
图。 2。当应用程序的活动正在运行时,它会切换到非MediaStyle
以显示没有播放/暂停/停止控件的警报通知,因此它们会在浅色背景上获得预期的暗文本:
图。 3,在棉花糖上,在应用程序之外,抬头通知的对比度非常低: - >这很难读!
图。 4。作为一项实验,调用NotificationCompat.Builder#setColor(0xb71c1c)
确实设置了非MediaStyle
通知的强调色(与图2相比):
图。 5。 ...在Marshmallow上,它设置MediaStyle
通知的背景颜色:
这是太多的颜色,毫无疑问超出规范。
图。 6。作为一种测试解决方法,该应用可以调用setColor(0x9e9e9e)
(标准的强调色),如果超出规范,这会使抬头通知更具可读性:
Q值。有没有一种解决方法可以让抬头MediaStyle
通知更具可读性,而不会弄乱下拉MediaStyle
通知?
显然,它只是一种棉花糖的解决方法。
编辑:这个错误更怪异。我试图预测什么时候可能会在Marshmallow上获得提醒通知(即在MediaStyle
上建立setSound()
通知),并且仅在这种情况下调用setColor()
。如果新通知替换了相同ID的下拉通知,则会从该通知继承背景颜色!即上一个下拉通知的setColor()
设置了这个新的抬头通知的背景颜色,而后来调用setColor()
设置了其强调颜色。如果新通知未替换以前的通知,则setColor()
会设置其背景色和强调色。
即使成功,通知也会在恢复到下拉通知时保持颜色。因此,即使系统正确预测系统何时打开抬头通知,此方法也无效。
摘要:我正在寻找比
更好的解决方法if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M) {
builder.setColor(context.getColor(R.color.gray_text)); // #9e9e9e
}
因为它使得抬头通知更具可读性,而不会冒任何Marshmallow设备难以阅读或加盖下拉通知的风险。
答案 0 :(得分:1)
问题不仅出现在" compat"通知。只需添加以下行:
builder.setStyle(new Notification.MediaStyle());
在Android 6中将我的通知设置为灰色(带有白色文字),而在Android 7中保持白色。我没有用于测试的Android 8设备。
请注意,我没有使用某些" compat"这里上课。
我建议写一个错误报告。
答案 1 :(得分:0)
情况更糟:
1
我正在使用setSmallIcon()和setLargeIcon()。
在Android 6上,小图标仅用于菜单栏,而不是通知本身。通知使用缩小的(在紧凑视图中)大图标显示在左侧。
在Android 7上,大图标(在紧凑视图中缩小)显示在右侧,而不是“右”侧,而是在左侧的相对侧,即在错误的一侧,确切地说。此外,通知的最后一行成为第一行,这破坏了我的用例。此外,此行前面有小图标和应用程序名称;作为副作用,小行被截断,这进一步破坏了我的应用程序。
2
在两个Android版本上,setShowActionsInCompactView()没有任何可见效果。
3
在锁定屏幕上,播放/暂停图标可见(通知已展开),但在未解锁设备的情况下无法访问。所以这里没用。