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

Android 12+开启动态色时,设置夜间模式后Theme.applyStyle()失效

Android 12+ 深色模式搭配动态色彩时Theme.applyStyle失效问题

问题现象

在Android 12(API 31)及以上版本中,满足以下条件时,调用AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)后执行Theme.applyStyle(..., force = true)不会立即生效,样式变化必须手动重建Activity才能体现:

  • 系统处于深色模式
  • 系统开启动态色彩功能
  • 关闭动态色彩则不会复现该问题

复现代码示例

override fun onCreate(savedInstanceState: Bundle?) {
    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
    super.onCreate(savedInstanceState)
    // 内部调用Theme.applyStyle的工具方法
    ColorPatchUtils.setTheme(R.style.MyPartialTheme, true)
}

临时解决方案

若需要样式立即生效,可在设置样式后手动触发Activity重建:

override fun onCreate(savedInstanceState: Bundle?) {
    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
    super.onCreate(savedInstanceState)
    ColorPatchUtils.setTheme(R.style.MyPartialTheme, true)
    // 手动重建Activity以应用样式
    recreate()
}

注意:需添加判断逻辑避免不必要的重复重建,例如仅在夜间模式切换且动态色彩开启时执行该操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:54:25