為什么會(huì)有黑白屏
在桌面點(diǎn)擊應(yīng)用圖標(biāo)后,在app進(jìn)程沒有創(chuàng)建的情況下,需要時(shí)間創(chuàng)建app進(jìn)程,初始化資源,以及啟動(dòng)首頁Activity的(這里討論的首頁是指AndroidManifest里面標(biāo)志的啟動(dòng)頁),這就意味點(diǎn)擊圖標(biāo)不能馬上看到啟動(dòng)頁。為了不讓用戶有卡頓的感覺,谷歌有了Preview Window,在啟動(dòng)頁沒有繪制完成時(shí),會(huì)先初始化一個(gè)Window,我們通常看到的黑屏或白屏,就是這個(gè)預(yù)覽窗口。
怎么知道是黑屏還是白屏?
黑白屏是預(yù)加載的窗口,這個(gè)窗口的一些屬性可以在theme里更改。新建一個(gè)項(xiàng)目,會(huì)在AndroidManifest的application所屬標(biāo)簽里面的內(nèi)容看到android:theme="@style/AppTheme"
,這個(gè)是默認(rèn)的theme。查看這個(gè)AppTheme,找到name="android:windowBackground"
這個(gè)屬性,查看屬性下的內(nèi)容,就能知道是黑屏還是白屏,這個(gè)屬性就是設(shè)置預(yù)覽窗口的背景。無論是黑屏還是白屏,給用戶的體驗(yàn)都不好,所以就有了把背景設(shè)為透明或者用一張圖片來作為啟動(dòng)背景的解決辦法。這些只是很基本的解決辦法,而且存在一定的弊端,既然我們要讓用戶體驗(yàn)更好,就應(yīng)該處理得更加優(yōu)雅一些。
如何優(yōu)雅的解決黑白屏
解決黑白屏,需要和啟動(dòng)頁結(jié)合起來。現(xiàn)在的APP基本上都有閃屏頁,有些是為了加載廣告,有些是為了通過閃屏頁初始化App的一些資源,本篇文章就討論有閃屏的啟動(dòng)頁,以網(wǎng)易云音樂對(duì)預(yù)加載窗口和閃屏頁的處理來舉例。來看看網(wǎng)易云的預(yù)加載頁和啟動(dòng)頁。
第一張是預(yù)加載頁,第二張是閃屏頁,閃屏頁只比預(yù)加載頁多了底部的圖標(biāo)和網(wǎng)易云音樂這四個(gè)字(其實(shí)是一整體,一張圖片),而且給人的感覺是一直是預(yù)加載頁,不過底部的圖標(biāo)和文字會(huì)慢慢出現(xiàn),這樣的處理比單獨(dú)的顯示圖片或者設(shè)置為透明更讓人能夠接受。下面我們就來看看代碼。
styles文件自定義Theme
<style name="AppTheme.lanuchTheme" >
<item name="android:windowBackground">@drawable/launch_layout</item>
<item name="android:windowFullscreen">true</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowContentOverlay">@null</item>
launch_layout,代碼中的top_img,是“音樂的力量”四個(gè)字的圖片。
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@android:color/holo_red_dark"/>
<item android:top="150dp">
<bitmap android:gravity="top" android:src="@mipmap/top_img" />
</item>
</layer-list>
SplashActivity的布局文件為
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/bottom_imag"http://bottom_imag為底部的圖標(biāo)和文字
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="50dp"
/>
</RelativeLayout>
最后在AndroidManifest里將lanuchTheme設(shè)置給閃屏頁(下文用SplashActivity表示),就大功告成了。
寫以上布局需要注意:由于沒有給SplashActivity的布局設(shè)置背景色,也就是透明色,而兩個(gè)頁面的區(qū)別只有底部加了一張圖片,所以在SplashActivity的布局中就不需要再把預(yù)加載頁的內(nèi)容再寫一次。
總結(jié)
黑白屏的解決是為了讓用戶覺得點(diǎn)擊圖標(biāo)就得到了響應(yīng),App啟動(dòng)很順暢,這個(gè)過程能在視覺上給人美感,那就更好了。不同的應(yīng)用場(chǎng)景可以有不同的解決辦法,不一定是有閃屏頁,也不一定要和網(wǎng)易云音樂一樣,也可以在閃屏頁寫一個(gè)動(dòng)畫或其它效果。想弄懂黑白屏,可以先做做以下功課
- 本篇網(wǎng)易云音樂解決方案的原理
- 明白為什么自定義theme,并且單獨(dú)設(shè)置給Activity
- 了解layer_list可以做什么
弄明白這幾個(gè)問題,解決黑白屏就不是什么難事了。
最后對(duì)于程序員來說,要學(xué)習(xí)的知識(shí)內(nèi)容、技術(shù)有太多太多,要想不被環(huán)境淘汰就只有不斷提升自己,從來都是我們?nèi)ミm應(yīng)環(huán)境,而不是環(huán)境來適應(yīng)我們!
這里附上上述的技術(shù)體系圖相關(guān)的幾十套騰訊、頭條、阿里、美團(tuán)等公司19年的面試題,把技術(shù)點(diǎn)整理成了視頻和PDF(實(shí)際上比預(yù)期多花了不少精力),包含知識(shí)脈絡(luò) + 諸多細(xì)節(jié),由于篇幅有限,這里以圖片的形式給大家展示一部分。
相信它會(huì)給大家?guī)砗芏嗍斋@:
上述【高清技術(shù)腦圖】以及【配套的架構(gòu)技術(shù)PDF】可以 關(guān)注我 【主頁簡(jiǎn)介】 或者【簡(jiǎn)信】免費(fèi)獲取
當(dāng)程序員容易,當(dāng)一個(gè)優(yōu)秀的程序員是需要不斷學(xué)習(xí)的,從初級(jí)程序員到高級(jí)程序員,從初級(jí)架構(gòu)師到資深架構(gòu)師,或者走向管理,從技術(shù)經(jīng)理到技術(shù)總監(jiān),每個(gè)階段都需要掌握不同的能力。早早確定自己的職業(yè)方向,才能在工作和能力提升中甩開同齡人