NotificationCompat.Builder setContentText()在黑暗模式下不显示CSS颜色

时间:2020-02-12 19:51:19

标签: android android-notifications

我正在使用builder.setContentText(txt)在通知的第二行显示文本,其中txt实际上是基于HTML的样式化文本(包括CSS颜色),以产生彩色文本。

我正在使用的代码是:

NotificationCompat.Builder builder = new NotificationCompat.Builder(context, channelId);
// ... various stuff ... then ...
String decodedHeader = Uri.decode(header);
Log.d(TAG, "decodedHeader: " + decodedHeader);
Spanned styledText = HtmlCompat.fromHtml(decodedHeader, HtmlCompat.FROM_HTML_MODE_LEGACY);
builder.setContentText(styledText);
Notification notification = builder.build();

和日志输出(以显示html / css内容)为:

decodedHeader: <span style="color:#333333;">↓72%</span><span style="color:#333333;"> │ </span><span style="color:#0ca911;">5°C</span><span style="color:#333333;"> │ </span><span style="color:#ff3333;">2°C↓</span><span style="color:#333333;"> │ </span><span style="color:#ff80c1;">4°C</span><span style="color:#333333;"> │ </span><span style="color:#00764a;">92%</span><span style="color:#333333;"> │ </span><span style="color:#5546ff;">14 mm</span><span style="color:#333333;"> │ </span><span style="color:#fd93fd;">8 (17) mph</span><span style="color:#333333;"> │ </span><span style="color:#333333;">19:34</span>

当系统(运行Android 10的系统)处于灯光模式时,通知会很好地显示以下颜色:

enter image description here

但是当系统处于黑暗模式时,颜色会丢失:

enter image description here

这仅仅是系统强制执行的,我无法控制吗?

1 个答案:

答案 0 :(得分:0)

他们在docs中清楚地说过

主题和样式
您的主题和样式应避免硬编码的颜色或意在浅色主题下使用的图标。您 应该使用主题属性(首选)或夜间限定的资源 代替。

并且还特定于通知。

要注意的常见陷阱:

  • 假设背景颜色始终是浅色
  • 硬编码文本颜色
  • 使用默认文本时设置硬编码的背景颜色 颜色
  • 使用静态颜色的可绘制图标

在所有这些情况下,请使用适当的主题属性,而不要使用硬编码的颜色。