从 Android 12 开始,SplashScreen API 可让应用通过动画启动,包括启动时的进入应用动作、显示应用图标的启动画面,以及向应用本身的过渡。SplashScreen 是 Window,因此涵盖 Activity官方文档
相关属性
windowSplashScreenBackground
属性单色填充背景
xml
<item name="android:windowSplashScreenBackground">@android:color/holo_orange_light</item>
windowSplashScreenAnimatedIcon
替换默认的窗口中心的启动画面图标。如果该对象可通过AnimationDrawable
和AnimatedVectorDrawable
呈现动画效果和进行绘制,还需要设置windowSplashScreenAnimationDuration
以在显示起始窗口的同时播放动画。
xml
<item name="android:windowSplashScreenAnimatedIcon">@drawable/logo</item>
windowSplashScreenAnimationDuration
指定启动画面图标动画的时长。设置后对实际启动画面的显示时间不会有影响,可以在自定义启动画面退出动画时使用SplashScreenView#getIconAnimationDuration
检索图标动画的时长,单位为ms。让启动画面显示更长时间。
xml
<item name="android:windowSplashScreenAnimationDuration">500</item>
windowSplashScreenIconBackgroundColor
设置启动画面图标后面的背景。当窗口背景与图标之间的颜色对比度不够高时,起到颜色过渡的作用。
xml
<item name="android:windowSplashScreenIconBackgroundColor">@android:color/holo_purple</item>
windowSplashScreenBrandingImage
设置要显示在启动画面底部的品牌logo图片。但是Google不建议使用
xml
<item name="android:windowSplashScreenBrandingImage">@drawable/logo_icon</item>
以下有两种方式调整SplashScreen
一、禁止使用SplashScreen
位置:android/app/src/main/res/values-v31/styles.xml
通过AndroidManifest.xml
内的android:theme="@style/LaunchTheme"
找到使用的主题名称为LaunchTheme
,找到v31/style.xml
修改为如下
xml
<style name="LaunchTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- 不显示SplashScreen -->
<item name="android:windowNoTitle">true</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowIsTranslucent">true</item>
<item name="android:screenOrientation">portrait</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>
二、修改
颜色资源文件位置
位置:android/app/src/main/res/values/colors.xml
xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="red">#ff0000</color>
<color name="splash_screen_background">#7B5AB6</color>
</resources>
修改位置同上
xml
<style name="LaunchTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Show a splash screen on the activity. Automatically removed when
Flutter draws its first frame -->
<item name="android:windowSplashScreenBackground">@color/splash_screen_background</item>
<item name="android:windowSplashScreenIconBackgroundColor">@color/red</item>
<item name="android:windowSplashScreenAnimatedIcon">@drawable/news_avd_v02</item>
<item name="android:windowSplashScreenAnimationDuration">500</item>
<item name="android:windowSplashScreenBrandingImage">@drawable/news_avd_v02</item>
</style>
- 如果
windowSplashScreenAnimatedIcon
非透明背景,且不是圆形,则会被裁剪成圆,此时windowSplashScreenIconBackgroundColor
不显示 - 如果
windowSplashScreenAnimatedIcon
为动效,但是未设置windowSplashScreenAnimationDuration
,则展示静止