題記:Android 狀態(tài)欄、導(dǎo)航欄相關(guān)操作對(duì)于軟件整體美觀起著至關(guān)重要的作用惩嘉,之前總是混淆一些東西罢洲,感覺其中的知識(shí)點(diǎn)有點(diǎn)凌亂,所以抽空學(xué)習(xí)了一下下文黎,現(xiàn)在總結(jié)記錄一下下惹苗,方便日后復(fù)習(xí)。
首先理論一下下耸峭,我覺得只有懂得了其中道理桩蓉,才會(huì)深刻。
概念
1)導(dǎo)航欄:省略...
2)狀態(tài)欄:導(dǎo)航欄上邊的細(xì)長(zhǎng)條是狀態(tài)欄劳闹,里面有電量院究、信號(hào)、時(shí)間什么的本涕,而我們所要的效果就是隨意的控制狀態(tài)欄顏色业汰、透明度,目的就是讓它與導(dǎo)航欄的搭配使整個(gè)界面更加美觀菩颖。
3)沉浸式:讓整個(gè)界面連成一片蔬胯,包括狀態(tài)欄
條件
1)在Android 4.4(v19)及其以上才有android:windowTranslucentStatus 這個(gè)屬性,當(dāng)這個(gè)屬性為true時(shí),才會(huì)出現(xiàn)沉浸式效果位他,頁面才會(huì)頂?shù)浇缑娴捻敹恕?br>
2)在Android 5.0(v21)及其以上才有android:statusBarColor 這個(gè)屬性氛濒,才可以設(shè)置狀態(tài)欄顏色
3)也就是說低于Android4.4(v19)時(shí),我們就不用去管狀態(tài)欄了
實(shí)現(xiàn)思路
方案一(大于等于android4.4)
直接在activity的Theme中鹅髓,設(shè)置 android:windowTranslucentStatus 為 true,這時(shí)整個(gè)界面就是沉浸式效果舞竿。
如果不想讓界面在最頂端只是想要控制狀態(tài)欄顏色時(shí),
1)當(dāng)android5.0以上時(shí)窿冯,可以設(shè)置最外層的布局外層view的fitSystemWindows為true骗奖,然后用代碼或者主題設(shè)置狀態(tài)欄的顏色;
2)當(dāng)android5.0以下時(shí)醒串,想實(shí)現(xiàn)狀態(tài)欄與toolbar顏色相同的情況执桌,設(shè)置android:windowTranslucentStatus 為 true后,可以在布局View的最上端放置一個(gè)TextView芜赌,高度與狀態(tài)欄相同仰挣,顏色設(shè)置為未來狀態(tài)欄的顏色,這樣textView就填充了狀態(tài)欄的位置缠沈,同樣實(shí)現(xiàn)了想要的效果
方案二(大于等于android4.4)
方案一每個(gè)activity實(shí)現(xiàn)效果時(shí)都要那樣操作一下膘壶,未免太麻煩了错蝴,所以才有了方案一的封裝,也是方案一的優(yōu)化颓芭,但實(shí)現(xiàn)原理幾乎是一樣一樣的顷锰。仔細(xì)看一下的話就會(huì)發(fā)現(xiàn)方案一的兩個(gè)實(shí)現(xiàn)方法可以合并成一個(gè),也就是第二個(gè)亡问。
1)設(shè)置activity主題官紫。
<!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style>
<style name="TranslucentThem" parent="AppTheme"></style>
<!-- v19 開始有 windowTranslucentStatus屬性 -->
<style name="TranslucentThem" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
</style>
<!-- v21 開始有 statusBarColor -->
<style name="TranslucentThem" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowTranslucentStatus">false</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:statusBarColor">@color/transparent</item>
</style>
2)封裝基類。
建立一個(gè)基類州藕,在基類中將填充狀態(tài)欄的TextView束世、ToolBar、要實(shí)現(xiàn)的布局文件三個(gè)view全部填充到自己定義的一個(gè)GroupView中慎框,我設(shè)置的這個(gè)GroupView為L(zhǎng)inerLayout良狈,然后再將GroupView加載到Activity中,這樣所有的activity只要繼承一下這個(gè)基類笨枯,其它一切都o(jì)k薪丁,要多方便有多方便。馅精。严嗜。。
這個(gè)實(shí)現(xiàn)起來其實(shí)并不難洲敢,重要的是思路漫玄,有問題可以留言,最后附上我封裝好的代碼压彭,封裝代碼在commonActivity中睦优,如果給個(gè)star啥的就更好了。壮不。汗盘。。