You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 22:45:03