android只设置部分控件随着软键盘的出现而腾出空间_编码库
首页 > 手机程序设计 > android

android只设置部分控件随着软键盘的出现而腾出空间

文章作者编码库 发布时间2019-12-10 17:18:00 阅读次数 2 本文共计:2304 字 文章评论 0 汇编语言程序设计 程序设计实践 程序设计 JAVA基础 JAVA学习 JAVA语言 程序员 windows程序设计 算法与程序设计 结构化程序设计
转载请标明出处: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;
        }
    }

这样便解决了。

参考:https://blog.csdn.net/dbmonkey/article/details/84966318

 

关键词:
后台-系统设置-扩展变量-手机广告位-内容正文底部
关于源码库

本站文章仅代表作者观点,不代表本站立场,所有资源非营利性免费分享。
编码库致力于各类程序源代码、程序设计与应用、网络程序源代码的资源共享,希望广大程序员努力学习,让我们用科技改变世界。
android只设置部分控件随着软键盘的出现而腾出空间:http://www.0314.online/jiaoben/android/8063.html

后台-系统设置-扩展变量-手机广告位-评论底部广告位

合作伙伴

编码库

http://www.0314.online/

统计代码 | 冀ICP备19024639号-1

Powered By 编码库 信息来自互联网