1. 前言
Android开发者都会有这样的体会吧!自己开发的APP,在启动APP的时候,会出现一段时间白屏或黑屏(这跟手机系统相关,不过大多数都是显示白屏的),然后才会显示APP的界面。其实这段时间的出现,是APP在启动时,需要初始化一些数据,然后才会去加载主活动(第一个Activity)造成的。那么我怎么解决呢?
2. 解决方案
第一步:在res/values/styles.xml文件中,自定义一个主题CustomTheme,继承Application的主题AppTheme,然后重写windowBackground属性,设置为一张图片或者一种颜色。这里以设置一张图片为例:
<resources>
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<!-- App的第一个Activity的自定义主题 -->
<style name="CustomeTheme" parent="AppTheme">
<item name="android:windowBackground">@drawable/bg_welcome</item>
</style>
</resources>
第二步:将AndroidManifest.xml中的主活动的主题修改为CustomTheme。然后就大功告成了。
<application
android:name=".MyApplication"
android:allowBackup="false"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".main.WelcomeActivity"
android:theme="@style/CustomTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
3. 补充
时间:2017.11.24
今天测试的时候,突然发现到一个问题。如果我们将主活动(专门做成一个欢迎界面,该欢迎界面只有一张图片)的布局的background属性也设置成@drawable/bg_welcome,启动APP后,能够发现欢迎界面会有一个明显的下坠感。经过不断的测试,终于发现了问题所在:
① APP先显示主题的默认背景图(bg_welcome,全屏,其高度包括了通知栏的高度);
② 然后才显示主活动的背景图(bg_welcome,全屏,其高度不包括通知栏的高度);
所以,造成下坠感,就是因为这个通知栏的高度。
那要怎么解决呢?其实很简单,如果主活动只有一张图片的话,我们完全可以不设置background,而是只设置主题的android:windowBackground,这样也完全可以实现欢迎界面的效果。但是,如果主活动是通过使用各种UI控件来打造欢迎界面的,那么我们可以使用截屏的形式,把主活动的欢迎界面截下来,然后让美工把通知栏去掉(这种方法确实有点low,不过我也没想到其他办法解决了,如果是在布局文件中里将UI控件上移一点,这个高度也不好控制,所以也挺麻烦的)
时间:2018.09.15
最近看了一篇不错的文章,在这里推荐一下《Android启动页黑屏及最优解决方案》