前(tu)言(cao)
(前情提要宰翅,想看正文不想看吐槽的請(qǐng)往頁(yè)底翻謝謝)
大兄弟弃甥,你有聽(tīng)說(shuō)S8的底部導(dǎo)航欄可以隱藏么?
當(dāng)聽(tīng)說(shuō)的時(shí)候真tm想死
為啥汁讼?
做沉浸式適配方案的想要砍死你好么淆攻?
君不見(jiàn)之前某酷派也干過(guò)這蠢事么?
還好人家那是4.x年代嘿架,沉浸式?jīng)]搞得那么火呢...
問(wèn)題在哪瓶珊?
說(shuō)到沉浸式大家都很熟悉了,在這個(gè)動(dòng)輒安卓8.0即將到來(lái)耸彪,7.x滿天飄伞芹,6.x遍地走,5.x已過(guò)時(shí)的年代再?zèng)]個(gè)沉浸式蝉娜?嘖嘖唱较,都不好意思說(shuō)你是干安卓的了。
那么召川,大兄弟南缓,你有聽(tīng)說(shuō)S8的底部導(dǎo)航欄可以隱藏么?
在三星S8全面屏安卓機(jī)皇上扮宠,為了“更好的體驗(yàn)”全面屏的效果西乖,三星在系統(tǒng)底層加入了安卓虛擬導(dǎo)航欄可隱藏設(shè)計(jì)狐榔,真是棒棒噠...nmmp喲,你tm一會(huì)出來(lái)了一會(huì)收回去了讓俺們程序怎么計(jì)算可用面積高度啊(╯—﹏—)╯(┷━━━┷
咳咳...素質(zhì)素質(zhì)...修養(yǎng)是一輩子的事.......
做過(guò)安卓沉浸式的都知道获雕,安卓沉浸式本質(zhì)上實(shí)際是將本Activity添加了一個(gè)全屏的Flag薄腻,然后讓上邊的狀態(tài)欄和下邊的導(dǎo)航欄透明的一個(gè)過(guò)程,在這個(gè)過(guò)程中不可避免的出現(xiàn)本來(lái)設(shè)計(jì)在Activity上的一部分布局被狀態(tài)欄和導(dǎo)航欄遮擋的問(wèn)題届案,簡(jiǎn)單點(diǎn)說(shuō)就是如下圖所示的問(wèn)題了:
這個(gè)問(wèn)題在我們的BaseActivity(http://www.reibang.com/p/ea92b765a946)中用一個(gè)占位布局sys_statusBar來(lái)進(jìn)行解決了庵楷,它的作用就是由BaseActivity在啟動(dòng)后獲取系統(tǒng)狀態(tài)欄的高度,自動(dòng)設(shè)置sys_statusBar高度楣颠,然后將Activity布局其他內(nèi)容從狀態(tài)欄的位置擠下去就ok了尽纽。
那么針對(duì)底部導(dǎo)航欄怎么辦呢?
我們使用一個(gè)盒子模型布局box_body來(lái)嵌套所有內(nèi)容童漩,并設(shè)置box_body的高度等于屏幕可用部分區(qū)域的高度即可弄贿。
但現(xiàn)在問(wèn)題又來(lái)了,針對(duì)某些可以自由隱藏和顯示底欄的手機(jī)矫膨,現(xiàn)有的方法會(huì)在隱藏底欄時(shí)使其在底欄部分留下一個(gè)空白的區(qū)域此問(wèn)題如何解決呢差凹?
查閱了一大堆資料發(fā)現(xiàn),問(wèn)題解決的鑰匙還是在android:fitsSystemWindows="true"這句代碼身上侧馅。
解決問(wèn)題
android:fitsSystemWindows="true"
這句話到底是什么意思呢危尿?
實(shí)質(zhì)上它的作用就是將設(shè)置有此屬性的布局,動(dòng)態(tài)的適配屏幕可用空間的高度馁痴。
那么問(wèn)題就簡(jiǎn)單了谊娇,不需要sys_statusBar,只需要做一個(gè)將內(nèi)容布局放在其中的盒子模型(LinearLayout或RelativeLayout)罗晕,設(shè)置其屬性android:fitsSystemWindows="true"系統(tǒng)就會(huì)自動(dòng)設(shè)置其高度適配屏幕可用面積济欢,問(wèn)題得以解決。
這次出現(xiàn)適配問(wèn)題主要也在于對(duì)fitsSystemWindows屬性的不理解上攀例,下個(gè)版本的BaseActivity將更新適配方案船逮,敬請(qǐng)期待。
如果本文對(duì)您有所幫助麻煩點(diǎn)個(gè)贊粤铭,如有疑問(wèn)歡迎在評(píng)論區(qū)留言交流挖胃。