Kotlin Android App如何配置使用设备默认主题(支持动态取色)
Android 应用解除自定义主题、跟随系统默认主题并适配Android 12动态主题操作方案
1. 修改主题配置文件
首先清理模板自动生成的自定义主题配置:
- 定位到项目资源目录下的两个主题文件:
res/values/themes.xml(浅色模式配置)、res/values-night/themes.xml(深色模式配置) - 将两个文件中自定义应用主题的
parent属性值替换为Theme.Material3.DayNight(如果需要保留默认顶部工具栏就用Theme.Material3.DayNight.ActionBar,不需要就用Theme.Material3.DayNight.NoActionBar,和原模板的ActionBar配置保持一致即可) - 删除两个主题标签内部所有自定义颜色配置项,包括模板默认生成的
colorPrimary、colorPrimaryVariant、colorOnPrimary、colorSecondary等所有和紫色配色相关的属性,避免自定义值覆盖系统默认配色。
注意:如果项目使用的Material依赖版本低于1.6.0,也可以用
Theme.MaterialComponents.DayNight作为父主题,后续通过代码动态注入Android 12的动态颜色即可。
2. 开启动态颜色适配
在自定义Application类的onCreate方法中加入如下代码,即可在Android 12及以上系统自动启用系统动态取色,低版本系统自动回退到系统默认的基础浅色/深色主题:
import com.google.android.material.color.DynamicColors class MyApp: Application() { override fun onCreate() { super.onCreate() DynamicColors.applyToActivitiesIfAvailable(this) } }
- 如果没有自定义Application类,也可以直接在入口Activity的
onCreate方法中,setContentView()调用之前加入DynamicColors.applyToActivityIfAvailable(this)实现单页面的动态颜色适配。 - 记得在
AndroidManifest.xml的application标签中配置name属性指向自定义的Application类,否则全局动态颜色配置不会生效。
3. 依赖版本校验
打开app模块下的build.gradle(模块级),确认Material依赖版本不低于1.5.0,低版本无法正常支持动态颜色特性,参考配置:
dependencies { implementation 'com.google.android.material:material:1.9.0' // 其他原有依赖保持不变 }
配置完成后重新编译安装应用即可:应用会自动跟随系统的浅色/深色模式切换,在Android 12及以上设备上会自动跟随系统壁纸提取的动态主题色变更控件、工具栏颜色,不会再显示模板默认的固定紫色配色。
内容的提问来源于stack exchange,提问作者johnwargo
相关产品推荐
相关产品推荐

