在Jetpack Compose中如何加载深色模式Drawable资源?
Jetpack Compose 深浅主题自动加载对应资源失效排查步骤
- 第一步:校验主题基础配置
检查theme.xml的父主题是否为Theme.MaterialComponents.DayNight系列主题,禁止使用固定的Light/Dark主题,否则系统不会自动触发-night资源的匹配逻辑。
你提供的theme.xml内容参考:
- 第二步:校验Compose主题层级与夜间模式参数
你的所有页面Composable代码必须被自定义的应用主题包裹,且主题要正确读取夜间模式状态,示例代码如下:
禁止在主题外层调用@Composable fun YourAppTheme( darkTheme: Boolean = isSystemInDarkTheme(), content: @Composable () -> Unit ) { val colorScheme = if (darkTheme) DarkColorScheme else LightColorScheme MaterialTheme( colorScheme = colorScheme, typography = Typography, content = content ) }painterResource加载图片,此时上下文未绑定主题配置,无法正确匹配资源。 - 第三步:校验资源文件配置
参考你提供的资源配置:- 默认drawable资源:

- 深色模式drawable资源:

- 文件夹结构:

确认两点:
drawable-night文件夹命名无拼写错误- 两个文件夹下的资源文件名、大小写完全一致
- 默认drawable资源:
- 第四步:清理缓存重新编译
调试场景下出现的不生效问题,先卸载设备上的应用再重新安装运行,或者清理Android Studio缓存后重新编译:File → Invalidate Caches → 勾选清理文件系统缓存和本地历史 → 重启IDE后重新运行。 - 第五步:手动切换主题场景适配
如果你是应用内手动切换深浅模式,不跟随系统配置,切换后需要重启Activity才能触发资源重加载,也可以直接在Compose中根据主题状态手动指定资源:val iconRes = if (isSystemInDarkTheme()) R.drawable.ic_daynight_night else R.drawable.ic_daynight_light Image( modifier = Modifier.align(Alignment.CenterHorizontally), painter = painterResource(id = iconRes), contentDescription = null )
内容的提问来源于stack exchange,提问作者Jero
相关产品推荐
相关产品推荐

