1. 程式人生 > >帶你重新認識:Android Splash頁秒開 解決啟動長時間白屏或黑屏的問題

帶你重新認識:Android Splash頁秒開 解決啟動長時間白屏或黑屏的問題

原理

我們之前設定了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中定義SplashActivitythemeSplashTheme

<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完全初始化完成後才會顯示,也會耗時。使用該啟動畫面實現也能相容到上面說的白屏和黑屏的問題。