cloudlink,牟冠红,投资茶叶
转载请标明出处: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; } }
这样便解决了。
参考:
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
Android Manifest中meta-data扩展元素数据的配置与获取方式
Android实现获取meta-data和build.gradle的值
Android获取清单文件中的meta-data,解决碰到数值为null的问题
解决webview 第二次调用loadUrl页面不刷新的问题
解决Android WebView拦截url,视频播放加载失败的问题
Android webview加载https链接错误或无响应的解决
网友评论