Marshmallow

时间:2016-07-16 20:44:11

标签: android colors notifications

使用android.support.v7.app.NotificationCompat.MediaStyle构建的非自定义通知在Android Marshmallow上的对比度非常低。 (这在Lollipop和Nougat上都很好。)

图。 1,在棉花糖上,从应用程序外部,其下拉通知在深色背景上有浅色文字: dark pull-down MediaStyle notification on Marshmallow

图。 2。当应用程序的活动正在运行时,它会切换到非MediaStyle以显示没有播放/暂停/停止控件的警报通知,因此它们会在浅色背景上获得预期的暗文本: light heads-up notification on Marshmallow

图。 3,在棉花糖上,在应用程序之外,抬头通知的对比度非常低: low-contrast heads-up MediaStyle notification on Marshmallow - >这很难读!

图。 4。作为一项实验,调用NotificationCompat.Builder#setColor(0xb71c1c)确实设置了非MediaStyle通知的强调色(与图2相比): light heads-up notification on Marshmallow with accent color

图。 5。 ...在Marshmallow上,它设置MediaStyle通知的背景颜色: red background-colored pull-down MediaStyle notification on Marshmallow 这是太多的颜色,毫无疑问超出规范。

图。 6。作为一种测试解决方法,该应用可以调用setColor(0x9e9e9e)(标准的强调色),如果超出规范,这会使抬头通知更具可读性: light-gray background-colored heads-up MediaStyle notification on Marshmallow

图。 7。 ...但它也会使下拉通知异常且超出规范: light-gray background-colored pull-down MediaStyle notification on Marshmallow

图。 8。 ......它在大型表格中看起来更糟糕: light-gray large format pull-down MediaStyle notification, showing color clash in context of other notifications

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设备难以阅读或加盖下拉通知的风险。

2 个答案:

答案 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

在锁定屏幕上,播放/暂停图标可见(通知已展开),但在未解锁设备的情况下无法访问。所以这里没用。