目前app的設(shè)計(jì)思路,都會有一個(gè)啟動頁,來進(jìn)行一些數(shù)據(jù)的初始化等一些比較耗時(shí)的操作,這就會造成啟動頁短暫的白屏或者黑屏(黑還是白取決于你的默認(rèn)主題)。那么,如何解決這種問題的?今天介紹一種比較完美的解決方案:layer_list疊加層。
如果你的啟動頁,是一張靜態(tài)圖片,那么這種方式非常適合你。
一般來說,啟動頁都不會很花哨,標(biāo)準(zhǔn)的都是一個(gè)logo+app名字,上下排列。類似于下圖:

如果是這樣的,那就是最簡單的,找UI切幾張logo+文字的圖,按照x xx xxx放好,然后drawable文件夾中新建一個(gè)layer_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/icon_welcome"
android:scaleType="center" />
</item>
</layer-list>
然后在你的清單文件中,給啟動頁Activity單獨(dú)設(shè)置一個(gè)主題:SplashAppTheme,并在其中引用剛才新建的疊加層布局文件,大功告成!這種方式可以做到秒開,無需任何等待。
<style name="SplashAppTheme" parent="android:Theme">
<item name="android:windowNoTitle">true</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowBackground">@drawable/layer_splash</item>
</style>
但是,如果你的啟動頁不是這種布局,而是類似于下圖這種:

上下布局,間隔較大,而且上下之間的布局不固定(根據(jù)機(jī)型屏幕大小自動適應(yīng)),這種,該如何處理呢?UI妹紙又要求不能等比例放大顯示,說那樣很丑吧啦吧啦吧。。。
其實(shí)我們可以這樣:把上下布局切開,然后就變成了這樣:


我們的xml文件這樣寫:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 整體的背景顏色 -->
<item>
<color android:color="@color/white" />
</item>
<!-- 頂部 -->
<item>
<bitmap
android:gravity="top|center_horizontal"
android:scaleType="center"
android:src="@drawable/splash_top" />
</item>
<!-- 底部 -->
<item>
<bitmap
android:gravity="bottom|center_horizontal"
android:scaleType="center"
android:src="@drawable/splash_bottom" />
</item>
</layer-list>
記得top 和 bottom要根據(jù)不同尺寸的啟動頁圖片進(jìn)行切割,這樣就完美解決了各種分辨率屏幕的適配問題(包括平板)。
如果你的啟動頁比較簡潔,和我說的這兩種情況差不多,你完全可以不給啟動頁Activity設(shè)置布局文件(setContentView()),只使用疊加層作為布局顯示。
如果你的app啟動頁比較花哨或者不規(guī)則,你也可以利用這種方式,增加一個(gè)比較簡潔的app啟動圖片的疊加層布局,作為啟動頁的主題進(jìn)行加載,啟動初始化完了再進(jìn)行頁面的變化等操作,也可做到秒啟動,不再忍受白屏或者黑屏。
感謝各位閱讀!
如果有錯(cuò)誤,還請指正!
你可能需要:【工具】判斷國產(chǎn)各大Rom的工具類