Jetpack Splash Screen API开启深色模式时windowSplashScreenAnimatedIcon不显示
问题根因
就算你全局配置了强制浅色模式,Splash Screen的主题加载逻辑早于AppCompatDelegate配置的生效时机,系统开启深色模式时,会按照夜间资源匹配规则加载启动屏相关配置,就会出现图标不显示的问题。
解决方案
按以下优先级逐一排查即可:
- 给启动屏主题强制禁用暗黑模式适配
在你的Theme.App.Starting配置中新增forceDarkAllowed属性关闭强制暗黑,修改后配置如下:<style name="Theme.App.Starting" parent="Theme.SplashScreen"> <item name="windowSplashScreenBackground">@color/white</item> <item name="windowSplashScreenAnimatedIcon">@drawable/splash_content</item> <item name="windowSplashScreenAnimationDuration">500</item> <item name="postSplashScreenTheme">@style/Theme.Main</item> <!-- 新增以下配置 --> <item name="android:forceDarkAllowed">false</item> </style> - 检查图标资源的限定符配置
确认你的@drawable/splash_content不存在drawable-night等夜间限定符文件夹下的同名特殊版本,如果有可以直接删除,或者统一替换为和日间模式一致的图标资源。 - 补充夜间模式下的启动屏主题配置
如果以上操作无效,在res/values-night文件夹下新建styles配置,写入和日间完全一致的Theme.App.Starting配置,确保系统切换到深色模式时加载的启动屏参数和日间完全相同。 - 调整强制浅色模式代码的调用位置
确认AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)这行代码是写在你自定义Application类的onCreate方法最顶部,不要写在首页Activity的onCreate中,避免配置生效晚于启动屏加载阶段。
内容的提问来源于stack exchange,提问作者Mable John
相关产品推荐
相关产品推荐

