轉載請標明出處:https://www.cnblogs.com/tangZH/p/12013685.html
更多精彩文章:http://77blogs.com/?p=276
在專案程序中,出現了一個需求,軟鍵盤要頂起部分控制元件,而另一部分控制元件不動,
關于這種需求,我們需要明確布局方式:
1、線性布局是行不通的,即使被頂上去也是全部被頂上去,因為線性布局中里面的控制元件都是線性排列的,那么我們就用相對布局這種方式,
2、相對布局這種方式中,需要被頂上去的那一部分需要用一個父布局包裹起來,并且與不需要頂起來的那一部分不能有依賴關系,比如layout_above這類的,否則一個位置改變,另一個也會跟著改變,
專案中需要被頂起來的那一部分使用了:android:layout_alignParentBottom="true",置于底部,
其余的:
布局這樣子之后,還要在manifests檔案里面配置android:windowSoftInputMode="adjustResize"
然而會發現還是沒有被頂起來,其實還差一個,在需要被頂起來的那一個父布局里面加上android:fitsSystemWindows="true"
這樣又出現了另一個問題:當我們使用沉浸式狀態欄的時候,設定android:fitsSystemWindows="true"會導致該父布局上面多出一塊空白,據說這塊空白的高度就是狀態欄的高度,
最后發現可以用下面的方法解決:
需要被頂起來的一個父布局采用自定義的布局,然后重寫相應的方法:
@Override protected boolean fitSystemWindows(Rect insets) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { insets.left = 0; insets.top = 0; insets.right = 0; } return super.fitSystemWindows(insets); } @RequiresApi(api = Build.VERSION_CODES.KITKAT_WATCH) @Override public WindowInsets onApplyWindowInsets(WindowInsets insets) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { return super.onApplyWindowInsets(insets.replaceSystemWindowInsets(0, 0, 0, insets.getSystemWindowInsetBottom())); } else { return insets; } }
這樣便解決了,
參考:https://blog.csdn.net/dbmonkey/article/details/84966318
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/45640.html
標籤:Android
