如上圖, 現(xiàn)在我們要實現(xiàn)一個評論說說的 功能,首先我們看下布局:
在布局的最底部,有一個LinearLayout ,包含我們評論的Edittext .現(xiàn)在我們要實現(xiàn)的是解決當Edittext獲得焦點的時候 ,鍵盤遮擋Edittext的問題。
首先我們想到的是,在清單文件中加入adjustPan
android:windowSoftInputMode="adjustPan"
然而我們會發(fā)現(xiàn),布局整體往上移,用戶體驗非常不好。
來說一下我的實現(xiàn)辦法:
首先必須要有一個Scrollview去包裹布局,除了,底部edittext布局
android:fitsSystemWindows="true"
android:background="@android:color/holo_green_light"
然后這兩行才是關(guān)鍵 。 在根布局加上上面兩個屬性。
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)置的一個布爾值屬性,通過其去調(diào)整基于系統(tǒng)窗口的視圖布局,例如狀態(tài)欄,如果該值為真,調(diào)整這個視圖的內(nèi)邊距與系統(tǒng)窗口的距離,只有該view是non-embedded(非嵌入的)的activity才會產(chǎn)生影響。
即在開放過程中設(shè)計應(yīng)用程序布局時當考慮當系統(tǒng)窗口的影響時,設(shè)置該值,如果為true,將自動調(diào)整系統(tǒng)窗口布局來適應(yīng)你自定義的布局。例如:當系統(tǒng)有狀態(tài)欄,你的應(yīng)用也存在狀態(tài)欄時便可以設(shè)置為ture。
關(guān)鍵上面兩個屬性,還有需要在其他子布局添加背景,不然就跟隨了最外層的背景,代碼部分還是采用網(wǎng)上通用方案,只是不需要自定義的狀態(tài)欄了,也不需要計算狀態(tài)欄的高度,也不需要在清單文件中添加屬性了。