解决在软键盘弹出的时候挤压或者遮盖原有的布局

59 篇文章 0 订阅
33 篇文章 1 订阅

首先来看一下两种情况,对用户来说体验真是不好

第一种:试图被遮盖,用户看不到输入的框框


第二种情况:试图整个被往上挤压,导致博主上面的标题栏被顶上去了


这两种站在用户的角度上都是不好的,所以给出一种方案

思路:获取到键盘弹出的时候的高度,然后让部分试图移动一下下,为什么说部分试图呢?因为就像博主这里的标题栏博主就不希望他有所改变,下面是实现的效果图


键盘弹出的时候并没有相应的api给我们调用,但是可以通过另一种方式实现.我们就设置软键盘的模式是遮盖我们的布局的.那么键盘弹出必然导致我们的activity的根试图被覆盖,这时候会导致视图的重新调整,所以这时候我们只需要监听视图被重新安排了的回调,然后根据整个根布局的高度和可见的高度算出被遮盖的高度,也就是键盘的高度,然后,在让部分布局向上滚动一段距离,这段距离就是键盘的高度!

那么上代码

    /**
     * @param root             最外层布局
     * @param needToScrollView 要滚动的布局,就是说在键盘弹出的时候,你需要试图滚动上去的View,在键盘隐藏的时候,他又会滚动到原来的位置的布局
     */
    private void controlKeyboardLayout(final View root, final View needToScrollView) {
        root.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

            private Rect r = new Rect();

            @Override
            public void onGlobalLayout() {
                //获取当前界面可视部分
                ConversationAct.this.getWindow().getDecorView().getWindowVisibleDisplayFrame(r);
                //获取屏幕的高度
                int screenHeight = ConversationAct.this.getWindow().getDecorView().getRootView().getHeight();
                //此处就是用来获取键盘的高度的, 在键盘没有弹出的时候 此高度为0 键盘弹出的时候为一个正数
                int heightDifference = screenHeight - r.bottom;
                needToScrollView.scrollTo(0, heightDifference);
            }
        });
    }

此方法还不是最好的方法,如果l列表中的item只有少数的,那么键盘弹出之后,信息就被滚动上去了,所以后来博主又写了另一种方法,就是算出键盘弹出的时候,列表或者说需要被调整的布局的高度.那么也是可以达到要求的


有问题欢迎留言哦

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 12
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值