
如上圖, 現(xiàn)在我們要實(shí)現(xiàn)一個(gè)評(píng)論說(shuō)說(shuō)的 功能,首先我們看下布局:
在布局的最底部,有一個(gè)LinearLayout ,包含我們?cè)u(píng)論的Edittext .現(xiàn)在我們要實(shí)現(xiàn)的是解決當(dāng)Edittext獲得焦點(diǎn)的時(shí)候 ,鍵盤(pán)遮擋Edittext的問(wèn)題。
首先我們想到的是,在清單文件中加入adjustPan
android:windowSoftInputMode="adjustPan"
然而我們會(huì)發(fā)現(xiàn),布局整體往上移,用戶體驗(yàn)非常不好。
來(lái)說(shuō)一下我的實(shí)現(xiàn)辦法:
首先必須要有一個(gè)Scrollview去包裹布局,除了,底部edittext布局
android:fitsSystemWindows="true"
android:background="@android:color/holo_green_light"
然后這兩行才是關(guān)鍵 。 在根布局加上上面兩個(gè)屬性。

android 布局xml中 android:fitsSystemWindows="true"的原文解析為:
Boolean internal attribute to adjust view layout based on system windows such as the status bar. If true, adjusts the padding of this view to leave space for the system windows. Will only take effect if this view is in a non-embedded activity.
內(nèi)置的一個(gè)布爾值屬性,通過(guò)其去調(diào)整基于系統(tǒng)窗口的視圖布局,例如狀態(tài)欄,如果該值為真,調(diào)整這個(gè)視圖的內(nèi)邊距與系統(tǒng)窗口的距離,只有該view是non-embedded(非嵌入的)的activity才會(huì)產(chǎn)生影響。
即在開(kāi)放過(guò)程中設(shè)計(jì)應(yīng)用程序布局時(shí)當(dāng)考慮當(dāng)系統(tǒng)窗口的影響時(shí),設(shè)置該值,如果為true,將自動(dòng)調(diào)整系統(tǒng)窗口布局來(lái)適應(yīng)你自定義的布局。例如:當(dāng)系統(tǒng)有狀態(tài)欄,你的應(yīng)用也存在狀態(tài)欄時(shí)便可以設(shè)置為ture。
關(guān)鍵上面兩個(gè)屬性,還有需要在其他子布局添加背景,不然就跟隨了最外層的背景,代碼部分還是采用網(wǎng)上通用方案,只是不需要自定義的狀態(tài)欄了,也不需要計(jì)算狀態(tài)欄的高度,也不需要在清單文件中添加屬性了。