解决输入框软键盘弹出,布局整体上移问题

今天测试提了个BUG,感觉挺典型,做一下记录

问题是  在输入框在布局靠下面的时候,当弹出软键盘会把布局整体上移,导致标题没有了,键盘离的输入框特别近(虽然没有遮挡字),测试让优化一下。

百度一半天,

1.   发现添加  Android:windowSoftInputMode 属性各种添加 和滚动控件配合,出现的结果要不不能移动,要不整体移动,远远达不到想要的效果。

2. 最后想通过监听跟布局的变化,来获取布局在窗体的不可视区域大小,监听键盘弹出,从而当键盘弹出时,计算出根布局要向上滚动的高度(要点:获取指定控件的坐标,计算出要滚动的高度 ,这样 可以让布局滚到指定位置了)

     代码为:

private void beyondKeyboardLayout(final View root, final View view) {
    // 监听根布局的视图变化
    root.getViewTreeObserver().addOnGlobalLayoutListener(
            new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    Rect rect = new Rect();
                    // 获取内容布局在窗体的可视区域
                    root.getWindowVisibleDisplayFrame(rect);
                    // 获取内容布局在窗体的不可视区域高度(被其他View遮挡的区域高度)
                    int rootInvisibleHeight = root.getHeight() - rect.bottom;
                
                    if (rootInvisibleHeight > 120) {
                        int[] location = new int[2];
                       
                        view.getLocationInWindow(location);

                        //解决大屏幕会下移问题
                          if((location[1]+ view.getHeight())> rect.bottom){
                                
                                int buttonHeight = (location[1]
                                        + view.getHeight()) - rect.bottom;
                                root.scrollTo(0, buttonHeight);
                            }else {
                                root.scrollTo(0, 0);
                            }
                    } else {
                        // 键盘隐藏
                        root.scrollTo(0, 0);
                    }
                }
            });
}

注意:根布局必须为整个屏幕布局,当时我再写的时候开始布局为线性布局嵌套标题和滑动布局,结果发现把滑动布局当根部局无法实现滑动,改为相对布局标题放在下面,内容布局把标题的位置用控件充气来(任务栏高度动态获取,否则特定机型不好看)让整体内容布局为根布局,实现上述效果

仅做记录为以后自己在遇到类似问题方便看

参考连接https://blog.csdn.net/crazyzhangxl/article/details/80857791

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值