android只设置部分控件随着软键盘的出现而腾出空间
转载请标明出处:https://www.cnblogs.com/tangzh/p/12013685.html
在项目过程中,出现了一个需求,软键盘要顶起部分控件,而另一部分控件不动。
关于这种需求,我们需要明确布局方式:
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; } }
这样便解决了。
参考:
上一篇: golang中,new和make的区别
下一篇: Web基础了解版01-html-css