FreddyChen / KulaKeyboard

Apache License 2.0
262 stars 45 forks source link

当RecyclerView里面数据少的时候,键盘弹起RecyclerView会上移 #3

Open zhangchao0916 opened 4 years ago

zhangchao0916 commented 4 years ago

当RecyclerView里面数据少的时候,键盘弹起之后,RecyclerView也会跟着向上移动,导致布局被遮挡 2291595995245_ pic 2291595995245_ pic

FreddyChen commented 4 years ago

当RecyclerView里面数据少的时候,键盘弹起之后,RecyclerView也会跟着向上移动,导致布局被遮挡 2291595995245_ pic 2291595995245_ pic

已修复此bug,请拉取新代码试试。

zhangjianhd commented 4 years ago

作者我看你现在解决的思路是在键盘弹起时不会盖住列表内容的时候就不滚动内容区了,但是这样会有一些问题: 1.手机尺寸不同,条目高度不同的时候这个控制的的标准就很难设定。 2.当键盘弹起不平移列表时,此时再收发消息,条目增加,就会插入到键盘盖住的区域去

FreddyChen commented 4 years ago

作者我看你现在解决的思路是在键盘弹起时不会盖住列表内容的时候就不滚动内容区了,但是这样会有一些问题: 1.手机尺寸不同,条目高度不同的时候这个控制的的标准就很难设定。 2.当键盘弹起不平移列表时,此时再收发消息,条目增加,就会插入到键盘盖住的区域去

是的,我也发现了,只是目前没有时间去解决。

  1. 严格来说,不能根据条目的个数来判断,应该是计算item总高度。
  2. 我有空看看,或者您那边如果能解决的话,给我提个pr最好...
zhangjianhd commented 4 years ago

作者我看你现在解决的思路是在键盘弹起时不会盖住列表内容的时候就不滚动内容区了,但是这样会有一些问题: 1.手机尺寸不同,条目高度不同的时候这个控制的的标准就很难设定。 2.当键盘弹起不平移列表时,此时再收发消息,条目增加,就会插入到键盘盖住的区域去

是的,我也发现了,只是目前没有时间去解决。

  1. 严格来说,不能根据条目的个数来判断,应该是计算item总高度。
  2. 我有空看看,或者您那边如果能解决的话,给我提个pr最好...

我这边处理的思路是获取了当前列表最后一个item距离recycleview底部的距离(lastItemToBottom)

第一个问题的解决思路:

  public int getLastItemToBottom() {
        if (mMessageViewModels.size() > 0) {
            View lastItem = linearLayoutManager.findViewByPosition(linearLayoutManager.findLastVisibleItemPosition());
           //这里注意ItemDecoration增加的高度、recycleview的padding等的影响
            int distance = getHeight() - lastItem.getBottom() - MessageDecorationBuilder.getDecorationHeight(); 
            return Math.max(distance, 0);
        } else {
            return 0;
        }
    }

获取到键盘或者输入法弹起的高度=reduceHeight,然后recycleview平移动画的距离就是

Math.max(reduceHeight -getLastItemToBottom() , 0)

这样不管是数据满屏,还是半屏,都是滚动需要滚动的距离。

第二个问题的思路:

然后再增加数据或者减少数据的时候(可以使用adater的registerAdapterDataObserver添加监听)都重新调用Math.max(reduceHeight -getLastItemToBottom() , 0)获取最新需要滚动的距离,执行平移方法,这样就能保证键盘弹起过程中发送消息增加的条目不会被遮盖->就是在数据改变的时候去校准

我这边没有直接依耐你这边的库,是借鉴你的思路本地写的,目前直接写在业务里,因为有些东西还没有很好的思路独立出来。所以很抱歉,没法给你提pr了。这两个问题我目前的解决思路就是这样。

非常感谢作者提供的这个库,受益良多

bingely commented 4 years ago

楼上思路不错,期待作者有时间解决,目前就差这个不满意了,改不了就废了

RunFeifei commented 4 years ago

目前拉的最新代码 还是有这个问题。up主已经很nb了 收益良多 感谢感谢

FreddyChen commented 4 years ago

目前拉的最新代码 还是有这个问题。up主已经很nb了 收益良多 感谢感谢

目前正在写im相关的文章,这个我有时间就解决一下哈。。。

FreddyChen commented 4 years ago

目前拉的最新代码 还是有这个问题。up主已经很nb了 收益良多 感谢感谢

谢谢,目前工作实在太忙,有空我会根据@ZhangJian96的思路来完善一下