從我學習寫第一個android項目以來,我都是這樣寫著啟動界面:
- 在里面做一些事,比如:第一次啟動時拷貝數據。
- 然后讓啟動界面一定待夠一定時間,比如兩秒三秒的。
就在前兩天我打開app的時候,我感覺啟動界面的時間太長了,而且為什么會先白屏一下然后進入啟動界面。很多app都有啟動界面,也有很多app沒有啟動界面,但是我發現這些沒有啟動界面的app,當我點擊桌面那個icon的時候,也會先白屏一下,然后進入主頁。
然后我決定做兩件事:
- 做完啟動界面的事就進入首頁,不故意睡了。
- 消滅白屏(跟主題設置的關系也有可能是黑屏),在點擊桌面app icon的瞬間開啟啟動界面,因為我點了美團,發現它是秒開的。。
如何消滅白屏
- 刪除啟動界面的xml布局,刪除setContentView。
- 在res/drawable里寫一個這種玩意:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<bitmap
android:id="@+id/bitmap_splash"
android:src="@mipmap/splash_bg">
</bitmap>
</item>
<item
android:top="@dimen/splash_logo_marginTop">
<bitmap
android:gravity="top"
android:src="@mipmap/splash_logo">
</bitmap>
</item>
<item
android:bottom="80dp">
<bitmap
android:gravity="bottom"
android:src="@mipmap/splash_word">
</bitmap>
</item>
</layer-list>
item有drawable屬性,但是不能接收mipmap參數,所以我又包了bitmap。
- 在style里配置主題,我這里AppBaseTheme的parent是Theme.AppCompat.Light.NoActionBar,然后還有其他的一些配置。
<style name="Splash" parent="AppBaseTheme">
<item name="android:windowBackground">@drawable/splash</item>
</style>
- 在manifest中splash的activity標簽中配置主題:
...
android:theme="@style/Splash"
...
- 啟動一下看看效果吧。
網上搜啟動消除白屏的方法,有設置啟動界面主題的背景為透明的,splash的xml布局還和以前一樣,這樣確實不白屏了,但是點擊桌面上的icon開始會等一會splash才會出現,體驗也不好。