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
相关产品推荐
相关产品推荐

