夜雨聆风学习资料网

ARTICLE · 1280153

保姆级学习开发安卓手机软件实战(十七)--减少冷启动窗口影响

保姆级学习开发安卓手机软件实战(十七)--减少冷启动窗口影响
前几天一直是用平板调试,没太多感觉,但是今天换成手机调试,发现启动有一个冷启动窗口:
这是系统在 App 还没画第一帧时,先用你的主题画一个占位窗口,避免黑屏。冷启动窗口默认白色,而我们的 App 是深色工业风,所以那个"白闪"特别刺眼。
它不能删掉,但是能定制,而且可以伪装成你自己的启动页。根据你的主题配置(主题是 Theme.Material.Light):

     res/values/colors.xml

<?xml version="1.0" encoding="utf-8"?><resources>    <colorname="purple_200">#FFBB86FC</color>    <colorname="purple_500">#FF6200EE</color>    <colorname="purple_700">#FF3700B3</color>    <colorname="teal_200">#FF03DAC5</color>    <colorname="teal_700">#FF018786</color>    <colorname="black">#FF000000</color>    <colorname="white">#FFFFFFFF</color>    <!-- 冷启动窗口背景:必须和 Color.kt 里的 Bg 完全一致(#0E1114) -->    <colorname="app_bg">#FF0E1114</color></resources>

       res/values/themes.xml(V31)

<?xml version="1.0" encoding="utf-8"?><resources>    <!--      Android 12+ 专属:系统强制会先画一个 Splash Screen(就是你照片里      白色底 + 绿色安卓机器人那个),这里把它改成和 App 启动页一模一样。      所以只在这个目录里"追加"属性,通用部分仍继承 Base.Theme.JSTZ1。    -->    <stylename="Theme.JSTZ1"parent="Base.Theme.JSTZ1">        <!-- 启动屏背景 = App 背景色,白屏消失 -->        <item name="android:windowSplashScreenBackground">@color/app_bg</item>        <!-- 隐藏系统那个圆形 App 图标(用透明形状顶掉) -->        <item name="android:windowSplashScreenAnimatedIcon">@drawable/ic_splash_blank</item>        <!-- 图标底色也设成同色,避免出现一圈浅色圆底 -->        <item name="android:windowSplashScreenIconBackgroundColor">@color/app_bg</item>        <!-- 不做品牌动画,App 画出第一帧立刻交接给 Compose 的 Splash -->        <item name="android:windowSplashScreenAnimationDuration">0</item>    </style></resources>

       res/values/themes.xml

<?xml version="1.0" encoding="utf-8"?><resources>    <!--      通用底主题(所有 Android 版本共用)      冷启动时系统会先用这里的 windowBackground 画一个占位窗口,      默认白色会闪一下,所以刷成 App 的背景色 #0E1114。    -->    <stylename="Base.Theme.JSTZ1"parent="android:Theme.Material.Light.NoActionBar">        <item name="android:windowBackground">@color/app_bg</item>        <!-- 配合 MainActivity 的 enableEdgeToEdge():系统栏透明,不留白边/黑边 -->        <item name="android:statusBarColor">@android:color/transparent</item>        <item name="android:navigationBarColor">@android:color/transparent</item>        <!-- 去掉窗口内容上方的装饰阴影 -->        <item name="android:windowContentOverlay">@null</item>    </style>    <!-- Android 11 及以下使用的最终主题 -->    <stylename="Theme.JSTZ1"parent="Base.Theme.JSTZ1" /></resources>

    新建 res/drawable/ic_splash_blank.xml

<?xml version="1.0" encoding="utf-8"?><shapexmlns:android="http://schemas.android.com/apk/res/android"    android:shape="rectangle">    <solidandroid:color="@android:color/transparent" /></shape>

改完 Build 一次,划掉进程再冷启动看效果。如果看到的还是"白屏"而不是深色,说明主题没挂上——把 AndroidManifest 第 26 行确认一下还指着 @style/Theme.JSTZ1:

    这样运行软件,就不是白色闪过了,是同色启动界面的背景色。

相关学习资料