Android 12 Splash Screen API 自定义多元素启动页实现方案问询
自定义Android 12+ 启动页实现方案
是可以实现完全匹配Android 12之前版本的自定义启动页效果的,无需使用会导致启动无响应的透明窗口方案,具体实现步骤如下:
- 引入官方兼容库统一多版本行为
在模块级build.gradle中添加splashscreen兼容库依赖,覆盖Android 5.0到最新版本的启动页逻辑,避免不同系统版本表现不一致:implementation "androidx.core:core-splashscreen:1.0.1" - 自定义启动页主题样式
在res/values/styles.xml中定义启动页主题,你可以直接将包含背景图、居中logo的layer-list作为启动页背景,绕过系统对单背景色、icon尺寸的限制:<style name="AppSplashTheme" parent="Theme.SplashScreen"> <!-- 直接传入你的layer-list drawable作为背景,可同时包含背景图和自定义尺寸的logo --> <item name="windowSplashScreenBackground">@drawable/splash_layer_list</item> <!-- 不需要系统自带的icon位的话,直接设置为透明即可 --> <item name="windowSplashScreenAnimatedIcon">@android:color/transparent</item> <item name="postSplashScreenTheme">@style/你的App主主题</item> </style> - 控制启动页退场时机避免重复显示
在启动页Activity的onCreate方法中、setContentView之前插入以下代码,主动控制系统启动页的消失时机,不会出现系统启动页和自定义启动页重复的问题:// Kotlin示例 val splashScreen = installSplashScreen() splashScreen.setKeepOnScreenCondition { // 应用初始化完成前返回true,保持启动页显示;初始化完成后返回false触发退场 !viewModel.isInitFinished.value }// Java示例 SplashScreen splashScreen = SplashScreen.installSplashScreen(this); splashScreen.setKeepOnScreenCondition(() -> !isAppInitFinished());
通过以上方案实现的启动页,和Android 12之前的自定义启动页效果完全一致,不会出现启动初期透明无响应的问题,也不会有启动页重复展示的bug。
内容的提问来源于stack exchange,提问作者aherman
相关产品推荐
相关产品推荐

