问题背景
- 某天公司产品找到我,问我某些机型上面打开后闪屏页会出现 App 的 Logo

- 上面说太丑了,有没有办法去掉这个闪屏页的 App Logo 呢?

解决方案
-
可以确定的是这个问题是 Android 12 的 SplashScreen 特性,几乎找遍了所有的适配文章和官方文档,这些文章或者文档无一例外,都是教你怎么适配 Android 12 的 SplashScreen 特性,并没有说怎么去除 SplashScreen 特性自带的图标,我自己也尝试调用相关 api 测试是否能去除,结果一无所获。
-
问题正处于一筹莫展的时候,我脑子突然有了一个大胆的想法,既然没办法干掉它,就想办法把它隐藏起来总可以了吧?
-
说干就干,于是我找到闪屏页的主题,并加入以下属性:
xml
<!-- 闪屏页主题样式 -->
<style name="SplashTheme" parent="FullScreenTheme">
......
<!-- 适配 Android 12 SplashScreen 特性 -->
<item name="android:windowSplashScreenBackground" tools:targetApi="31">@color/transparent</item>
<item name="android:windowSplashScreenIconBackgroundColor" tools:targetApi="31">@color/transparent</item>
<item name="android:windowSplashScreenAnimatedIcon" tools:targetApi="31">@color/transparent</item>
<item name="android:windowSplashScreenBrandingImage" tools:targetApi="31">@color/transparent</item>
</style>
-
有人会说,这几个属性是 Android 12 才有的属性,你加个
tools:targetApi="31"来抑制警告在低版本下面真的没有问题吗?我非常确定来回答没有问题,因为系统读取 App 主题的时候,是通过读取 xml 文件来获取属性的,在这种情况下,低版本并不会去读取高版本的属性,因为它压根不知道有这几个属性,所以不会有任何问题,经过验证也确实如此。 -
废话不多说,来看看加上这几个属性之后的效果吧,上图:

-
成功解决问题,你看看解决这个问题的方法并没有多难,一个脑筋急转弯而已,解决难题的方式总是那么朴实无华。
-
截止目前,我是行业第一个也是唯一一个解决此问题并将解决方案开源出来的人,当然我的粉丝们都提前知道了,在前一阵更新了 AndroidProject(App 架构 + App 模板),同时也将这个优秀的技术方案纳入到这个项目中,但实际这个项目有很多优秀的技术方案并没有写成文章,你如果感兴趣,可以通过阅读源码来知晓:
-
Java 版本:AndroidProject
-
Kotlin 版本:AndroidProject-Kotlin
-