目录
1.在drawable界面创建splash_background.xml文件
前言
市面上的有些App,点击App图标后,会出现白屏或者黑屏一段时间的问题。为什么会出现这种问题呢,其实在启动Acitivty的启动过程中,onCreate()方法并不是发生在窗口绘制的第一步,系统会在执行这个步骤之前,先绘制窗体,这时候onCreat()还没被执行,我们的setContentView(R.layout.activity_splash)就更不会被执行了,布局资源还没有被加载,这时系统就会使用当前Activity的主题默认背景色来展示。
我们可以给启动页设置上theme,设置上背景图片即可,但是有时背景图片过大也会在主线程解码造成耗时,这时我们可以不使用一个完整的图片来做启动页,而使用layer-list,背景色和图片叠加来减少解码的耗时。
1.在drawable界面创建splash_background.xml文件
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<shape>
<solid android:color="@android:color/background_dark" />
</shape>
</item>
<item
android:width="20dp"
android:height="20dp"
android:gravity="center">
<bitmap
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/icon">
</bitmap>
</item>
</layer-list>
2.创建style样式
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Launch_logo" parent="android:Theme.Black.NoTitleBar.Fullscreen">
<item name="android:windowBackground">@drawable/splash_background</item>
<item name="android:windowFullscreen">false</item>
<item name="android:windowIsTranslucent">false</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowActionBar">false</item>
<item name="android:typeface">monospace</item>
</style>
</resources>
3.把这种主题风格设置给启动页
<activity
android:name=".MainActivity" android:configChanges="touchscreen|keyboard|keyboardHidden|navigation|orientation|screenLayout|uiMode|screenSize|smallestScreenSize|density|locale|fontScale|layoutDirection|mcc|mnc"
android:launchMode="singleTask"
android:screenOrientation="landscape"
android:theme="@style/Launch_logo">
总结
到这里我们就完成了将启动页的图片替换为drawable的方式,节省了启动页解码图片的时间,性能得到了较大的提升。