You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何阻止Android夜间模式更改自定义View的绘制颜色?

问题解决方案

这个问题是Android 10及以上系统的自动深色主题适配特性导致的,按以下步骤即可解决:

  • 第一步:禁用自定义View的自动深色反转
    系统默认会对未适配深色主题的View做自动颜色反转,把白色背景直接转成黑色,你可以在自定义View的构造方法中添加代码关闭该特性:
// Java写法
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    setForceDarkAllowed(false);
}
// Kotlin写法
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
    forceDarkAllowed = false
}

也可以直接在布局XML中给自定义View添加属性:

<你的自定义View全类名
    ...
    android:forceDarkAllowed="false"
    />
  • 第二步:优化onDraw背景绘制逻辑
    你当前调用canvas.drawColor(Color.WHITE)默认用的是SRC_OVER混合模式,可能和画布底层残留的深色缓存混合异常,改成先清除再绘制即可:
// 替换原有绘制背景的代码
canvas.drawColor(Color.WHITE, PorterDuff.Mode.CLEAR);
canvas.drawColor(Color.WHITE);
  • 第三步:兜底方案
    如果上述操作后仍有问题,可以直接在View构造方法中显式设置背景色,优先级高于系统主题适配,不需要依赖onDraw绘制背景:
setBackgroundColor(Color.WHITE);

内容的提问来源于stack exchange,提问作者Diken Mhrz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 21:36:03