帶你重新認識:Android Splash頁秒開 解決啟動長時間白屏或黑屏的問題
阿新 • • 發佈:2018-12-30
原理
我們之前設定了Window
透明,實現了去掉白屏和黑屏,現在要弄一個顏色或者圖片來代替白屏和黑屏,所以首先要把原來style
中的透明屬性去掉。然後給Window
設定一個背景顏色或者圖片。
實現步驟
1、首先在res/drawable下新建一個layer-list
,名字隨便取,比如splash.xml
:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 背景顏色 -->
<item android:drawable="@color/white" />
<item>
<!-- 圖片 -->
<bitmap
android:gravity="center"
android:src="@drawable/wel_page" />
</item>
</layer-list>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
layer-list
大家都會寫吧,上面是背景顏色,下面是一張圖,這張圖可以是全屏的圖,可以是一張小圖。如果是全屏的圖,那上面的顏色也可以不用設定,如果是小圖,就要指定下顏色了,並且可以指定圖片在位置。
2、給主題設定Window
背景:
<style name="SplashTheme" parent="AppBaseTheme">
<!-- 歡迎頁背景引用剛才寫好的 -->
<item name="android:windowBackground">@drawable/splash</item>
<item name="android:windowFullscreen">true</item>
<!-- <item name="android:windowIsTranslucent" >true</item> --> <!-- 透明背景不要了 -->
</style>
- 1
- 2
- 3
- 4
- 5
- 6
上面的<item name="android:windowBackground">
可以用我們上面的layer-list
作為背景,當然也可以設定個全屏的圖片。
3、在AndroidManifest.xml中定義SplashActivity
的theme
為SplashTheme
:
<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>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
4、SplashActivity的實現,在onCreate()
啟動你的MainActivity
即可,其他什麼都別幹:
public class SplashActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startActivity(new Intent(this, MainActivity.class));
finish();
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
特別注意:為保證啟動速度,SplashActivity
不要呼叫setContentView()
方法。因為Activity
設定了layout
,它在App
完全初始化完成後才會顯示,也會耗時。使用該啟動畫面實現也能相容到上面說的白屏和黑屏的問題。