啟動頁面
目前刚陡,很多 Android 應用都有一個啟動界面 (Launch/Splash Screen)陆盘,即應用在從桌面或應用抽屜啟動的過程中舷蟀,顯示的一個有內(nèi)容的界面恤磷,而不是一個空白頁;在應用運行時野宜,啟動界面則不會出現(xiàn)扫步。
根據(jù) Material Design 的定義,啟動界面可分為兩種:
一種是應用在數(shù)據(jù)加載過程中顯示的不可交互的占位符界面 (Placeholder UI)速缨,它適用于應用啟動以及應用內(nèi) Activity 切換的場景,好處是讓用戶感知數(shù)據(jù)正在加載代乃,而不致于誤認為應用無響應旬牲。在此暫不討論這種啟動界面仿粹。
另一種是專門在應用啟動時顯示的品牌頁 (Branded Launch Screen),它可以在應用啟動的短暫時間內(nèi)展示應用的品牌信息原茅,這有利于提升應用的品牌辨識度吭历。例如以下三款應用的啟動界面都顯示了自家應用的 logo;另外擂橘,也可以顯示應用的品牌口號晌区,不過要避免使用需要用戶仔細閱讀的大段文字。
方式一
分為3個步驟:
- 設置主題元素
- 定義啟動界面
- 切換應用主題
1. 設置主題元素
In res/values/styles.xml
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name=”AppTheme.Launcher”>
<item name="android:windowBackground">@drawable/launch_screen</item>
<!-- Optional, on Android 5.0+ you can modify the colorPrimaryDark color to match the windowBackground color for further branding-->
<!-- <item name="colorPrimaryDark">@android:color/white</item> -->
</style>
</resources>
由于啟動界面只在應用啟動瞬間顯示通贞,所以不能直接在 AppTheme 中直接修改主題元素朗若,而是需要新建一個繼承 AppTheme 的 Launcher Theme,命名為 AppTheme.Launcher昌罩,并且只修改其中的 android:windowBackground 屬性為想要的 drawable 資源即可哭懈。對于 Android 5.0 及以上的設備,還可以修改 colorPrimaryDark 屬性為匹配啟動界面的顏色茎用,提供更好的視覺效果遣总。
2. 定義啟動界面
In res/drawable/launch_screen.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"
android:opacity="opaque">
<!-- The background color, preferably the same as your normal theme -->
<item android:drawable="@android:color/white"/>
<!-- Your product logo - 144dp color version of your app icon -->
<item>
<bitmap
android:src="@drawable/product_logo_144dp"
android:gravity="center"/>
</item>
</layer-list>
在上面 AppTheme.Launcher 主題中 android:windowBackground 屬性設置的 drawable 資源不能是一個圖片,因為圖片會拉伸至整個屏幕的尺寸轨功;所以這里需要定義一個 XML 文件來設置啟動界面旭斥。注意 layer-list 的 android:opacity 透明度屬性要設置為 opaque(不透明),以防主題轉(zhuǎn)換時發(fā)生閃屏的情況古涧。
3. 切換應用主題
設置好 Launcher Activity 在應用啟動瞬間應用的主題后垂券,即可在 AndroidManifest.xml 中設置好,這樣 Launcher Activity 就默認使用 AppTheme.Launcher 主題了蒿褂,使啟動界面得以顯示圆米。
In AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
<application ...>
<activity
android:name=".MainActivity"
android:theme="@style/AppTheme.Launcher">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
不過,在調(diào)用 Launcher Activity 的 onCreate() 時啄栓,其主題應該切換回 AppTheme娄帖,這里在 super.onCreate() 之前通過 setTheme(R.style.AppTheme) 設置好。
In MainActivity.java
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
// Make sure this is before calling super.onCreate
setTheme(R.style.AppTheme);
super.onCreate(savedInstanceState);
// ...
}
}
方式二
新建一個專門的 Splash Activity昙楚,使其作為應用的 Launcher Activity近速;也就是說,應用啟動時堪旧,啟動界面顯示完即跳到 Splash Activity 中削葱,隨后再跳到其它 Activity。雖然這樣增加了 Activity 之間切換的延時淳梦,不過應用可以實現(xiàn)根據(jù)不同的啟動狀態(tài)跳轉(zhuǎn)到不同 Activity 的功能析砸。在此不過多討論。
歡迎關注我
簡書:http://www.reibang.com/u/5f3130bdf4fc
Github:https://github.com/huangziye