現(xiàn)在很多應(yīng)用都會(huì)在進(jìn)入主界面之前李根,添加一個(gè)啟動(dòng)頁(yè)校摩,然后加入幾秒鐘的廣告,我覺得這個(gè)不能算是 “真正意義上的 “ 啟動(dòng)頁(yè)邓深,應(yīng)該叫廣告頁(yè)未桥。
Android 應(yīng)用冷啟動(dòng)時(shí),需要從Application開始啟動(dòng)芥备,加載時(shí)間就會(huì)比較長(zhǎng)冬耿,這段時(shí)間里,用戶所能看到的就是”白屏“(這是因?yàn)槟J(rèn)的AppTheme的 android:windowBackground 默認(rèn)是設(shè)置成白色的)萌壳,因此我認(rèn)為真正的啟動(dòng)頁(yè)就應(yīng)該是讓用戶點(diǎn)開應(yīng)用時(shí)看到的不是”白屏“亦镶,而是我們創(chuàng)建的一個(gè)頁(yè)面日月,可以是一張圖片、一段文字缤骨。爱咬。。
這樣绊起,不明真相的用戶直觀感覺到的就是精拟,這個(gè)應(yīng)用可以秒開誒!(滑稽.jpg)
下面直接來看怎么實(shí)現(xiàn)吧!
- 首先在 drawable 目錄下新建一個(gè) splash_screen.xml 文件
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<item android:drawable="@color/colorPrimary"/>
<item>
<bitmap android:src="@drawable/ic_logo"
android:gravity="center"/>
</item>
</layer-list>
我們使用 layer-list 標(biāo)簽創(chuàng)建一個(gè)圖層列表勒庄,實(shí)際就是一個(gè) LayerDrawable 串前,設(shè)置一個(gè)背景,然后放上應(yīng)用圖標(biāo)实蔽,這是我想展示的啟動(dòng)頁(yè)荡碾,可以根據(jù)自己的需要自行定義。
- 然后在 style.xml 文件中定義一個(gè) SplashTheme
<resources>
...
<style name="SplashTheme" parent="AppTheme">
<item name="android:windowBackground">@drawable/splash_screen</item>
</style>
</resources>
這里只需要將窗口背景設(shè)置為我們剛才定義的 LayerDrawable局装。
- 然后需要在 AndroidMenifest.xml 文件中將我們的主頁(yè)面坛吁,我這里是 MainActivity 的 android:theme 設(shè)置成我們定義的SplashTheme
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
...
>
...
<application
...
>
<activity
android:name=".activity.MainActivity"
android:launchMode="singleTask"
android:theme="@style/SplashTheme">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
...
</application>
</manifest>
到這一步,你可能會(huì)表示擔(dān)心铐尚,我們并不希望MainActivity的 theme 是這樣的啊拨脉,不要著急,看最后一步宣增。
- 在MainActivity的onCreate方法中設(shè)置我們需要的 theme
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
就是這么簡(jiǎn)單玫膀,下面來看一下效果吧