Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
zhangchao0916 opened this issue Jul 29, 2020 · 8 comments

Comments

@zhangchao0916
Copy link

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

@FreddyChen
Copy link
Owner

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

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

@zhangjianhd
Copy link

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

@FreddyChen
Copy link
Owner

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

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

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

@zhangjianhd
Copy link

作者我看你现在解决的思路是在键盘弹起时不会盖住列表内容的时候就不滚动内容区了,但是这样会有一些问题:
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
Copy link

bingely commented Aug 13, 2020

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

@RunFeifei
Copy link

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

@FreddyChen
Copy link
Owner

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

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

@FreddyChen
Copy link
Owner

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

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants