项目源码
https://github.com/liaozhoubei/NetEasyNews/tree/dev_kotlin
现在许多应用在启动时会在 Application 或者 splashActivity 之中做大量的逻辑运算,又或者因为apk 过大,多大几十上百兆,等等原因,造成应用在启动的时候会有短暂的白屏出现,然后才进入闪屏页面。
因此为了掩盖白屏现象,大家会更改 SplashActivity 的 theme 来将白屏更改为其他图片。
在 styles.xml 中添加如下代码:
<style name="SplashTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowBackground">@drawable/bg_splash</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowContentOverlay">@null</item>
</style>
然后在 AndroidManifest.xml 设置 splashActivity 的主题:
<activity android:name=".SplashActivity"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
如此便简单的将白屏替换为自定义图片了。
问题
替换完之后,会发现一个问题,在适配不同屏幕的手机的时候发现设置的图片被拉伸变形了!
我们试着将图片设置为 .9 格式的图片,然而问题没解决,反而出现另一个问题,那就是 splashActivity 的布局图片会受到 .9 图片的大小影响!
##解决
实际上设置取代白屏的的 bg_splash 不应该是一整张图片,而应该是 drawable 的资源文件,用 layer-list 进行布局。
在 drawable 文件夹中创建 bg_splash.xml ,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<!-- 背景颜色,在上图中该颜色为黑色 -->
<item android:drawable="@android:color/white" />
<!-- 黑色背景上的其他图片元素,比如 一个居中显示的 logo 图标-->
<item>
<bitmap
android:gravity="center"
android:src="@drawable/bg_main_logo" />
</item>
<!-- 最下面的文字,注意这里有个 bottom 设置 -->
<item android:bottom="@dimen/logo_text_bottom">
<bitmap
android:gravity="bottom"
android:src="@drawable/bg_text_name" />
</item>
</layer-list>
这样就设置了居中的logo和居于底部的公司名。
再次启动应用,完美!
但是使用 layer-list 有点不方便的是无法直接使用文字,其次就是图片布局只能是 左上角,右上角,中间,底部等位置,不能设置其他位置。
如果大家对于项目的后续感兴趣可以关注我的个人微信公众号,每次更新都会在上面进行推送,还可以加入QQ群共同进步呢
微信公众号: Android实战之旅
微信号: unidirection
扫描关注:
也可以申请加群,大家一起沟通交流
QQ 群:799054441