Android 12 SplashScreen启动屏

SplashScreen是 Android 12 引入的特性,为了统一启动屏和优化启动,增加了 纯色背景+自适应图标 的启动屏。

一、启动图设计

启动页,由以下组成:

  1. 图标(矢量图)
  2. 图标背景(颜色)
  3. 图标遮罩层
  4. 窗口背景(颜色)

上图中 1-2 屏是 无图标背景的显示效果;3-4 屏是 有图标背景色的显示效果。

样式尺寸
类型 大小 说明
应用图标 240x240dp 内容在160dp圆内
应用图标(无图标背景) 288x288dp 内容在192dp圆内
品牌图片 200x80dp -

图标内容为 2/3 大小,图标遮罩(盖)层为 1/3 大小。

二、使用

1. 这里直接使用 兼容库
gradle 复制代码
dependencies {
    implementation "androidx.core:core-splashscreen:1.0.0"
}
2. 主题配置启动屏

添加启动屏主题,设置到 <activity />android:theme 属性上。

主题继承 Theme.SplashScreenTheme.SplashScreen.IconBackground,区别是:

  1. Theme.SplashScreen 没有图标背景,图标大小288dp,
  2. Theme.SplashScreen.IconBackground 设置图标背景色,图标240dp
xml 复制代码
<style name="Theme.App.Splash" parent="Theme.SplashScreen">
    <item name="windowSplashScreenBackground">#FF0000</item>
    <item name="windowSplashScreenAnimatedIcon">@mipmap/ic_launcher_round</item>
    <item name="windowSplashScreenAnimationDuration">280</item>
    <item name="postSplashScreenTheme">@style/Theme.App</item>
</style>

主题属性:

  1. windowSplashScreenBackground 设置背景色或图片
  2. windowSplashScreenAnimatedIcon 设置中间的 图标
  3. windowSplashScreenAnimationDuration 中间 动画矢量图标 的时间
  4. postSplashScreenTheme 设置启动完成后的 主题,即 Activity 实际主题
3. 添加启动屏到Activity

调用 installSplashScreen() 设置 启动屏,然后 监听启动屏结束
splashScreen.setOnExitAnimationListener

注意:

  1. 默认自动 移除 启动屏;
  2. 设置setOnExitAnimationListener时,需要手动 splashScreenViewProvider.remove() 移除 启动屏。
kotlin 复制代码
class SplashActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        val splashScreen = installSplashScreen()
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_splash)
        splashScreen.setOnExitAnimationListener(object : SplashScreen.OnExitAnimationListener {
            override fun onSplashScreenExit(splashScreenViewProvider: SplashScreenViewProvider) {
                splashScreenViewProvider.remove()
                // 启动屏结束后,跳转页面
                navToMain()
                finish()
            }
        })
    }

    private fun navToMain() {
        val intent = Intent(this, MainActivity::class.java)
        startActivity(intent)
    }
}
4. 保持启动屏显示

通常 启动页 显示完后,可能APP并没有完全初始化。此时 可能需要等待,为了 保持 启动页 显示,可通过 OnPrewDrawListener 配置 false 保持 第一帧,不再绘制。

或直接使用 splashScreen.setKeepOnScreenCondition(),更简单地 保持和取消 启动屏显示。

kotlin 复制代码
val isAppInited = false

splashScreen.setKeepOnScreenCondition {
  !isAppInited
}

说明:

上述方法,内部也是使用 ViewTreeObserveraddOnPreDrawListenerremoveOnPreDrawListener 方法,

来 保持第一帧的显示 和 继续绘制。

直到 Condition 返回 false 时,才会触发 setOnExitAnimationListener 的回调。

文档

相关推荐
2301_771717214 小时前
解决mysql报错:1406, Data too long for column
android·数据库·mysql
dvjr cloi5 小时前
MySQL Workbench菜单汉化为中文
android·数据库·mysql
jinanwuhuaguo7 小时前
(第二十七篇)OpenClaw四月的演化风暴:OpenClaw 2026年4月全版本更新的文明级解读
大数据·人工智能·架构·kotlin·openclaw
随遇丿而安7 小时前
第2周:`EditText` 不只是输入框,它是 Android 输入体验的第一道门
android
我命由我123457 小时前
Kotlin 开发 - lateinit 关键字
android·java·开发语言·kotlin·android studio·android-studio·android runtime
一起搞IT吧7 小时前
Android性能系列专题理论之十:systrace/perfetto相关指标知识点细节含义总结
android·嵌入式硬件·智能手机·性能优化
小书房12 小时前
Kotlin的by
android·开发语言·kotlin·委托·by
jinanwuhuaguo13 小时前
(第二十八篇)OpenClaw成本与感知的奇点——从“Token封建制”到“全民养虾”的本体论地基
android·人工智能·kotlin·拓扑学·openclaw
xxjj998a13 小时前
Laravel4.x核心特性全解析
android·mysql·laravel
JoshRen14 小时前
2026教程:在Android Termux中集成Gemini 3镜像站实现移动端文档自动处理与摘要生成(附国内免费方案)
android