Recyclerview 测量滚动距离以禁用键盘

Posted

技术标签:

【中文标题】Recyclerview 测量滚动距离以禁用键盘【英文标题】:Recyclerview measure scroll distance to disable keyboard 【发布时间】:2020-10-12 05:26:27 【问题描述】:

如果用户开始滚动RecyclerView,我想隐藏键盘。 dy 是滚动距离,如果我理解正确的话,如果它通过了某个值,我可以隐藏键盘。

但我发现如果你在屏幕上按住手指并慢慢滚动,它不会改变dy的值(它仍然是1),这意味着我的方法不起作用。

有人知道如何处理这个特定用例的其他替代方法吗?

代码:

list.addOnScrollListener(object : RecyclerView.OnScrollListener() 
     override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) 
              if (dy.absoluteValue > KEYBOARD_HIDE_DIST) editText.clearFocus()
     
)

【问题讨论】:

如果您使用的是线性布局管理器,您可以添加一个监听器并在任何更改时隐藏键盘 【参考方案1】:

在recyclerView上使用这个函数computeVerticalScrollOffset()会给出滚动位置的偏移量

 recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() 
           @Override
           public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) 
                   super.onScrolled(recyclerView, dx, dy);
                   Log.d("Scrolled","Distance Scrolled : "+ recyclerView.computeVerticalScrollOffset());
           
       );

还没有开始使用 kotlin,因此我添加了 java 代码。希望你得到了东西。让我知道它是否适合你

【讨论】:

以上是关于Recyclerview 测量滚动距离以禁用键盘的主要内容,如果未能解决你的问题,请参考以下文章

如何禁用 RecyclerView 滚动?

键盘打开时相应向上滚动 RecyclerView

滚动时扩展项目之间的 RecyclerView 空间

带有 MotionLayout 的 Android 折叠工具栏 - 当 RecyclerView 为空/不可滚动时禁用运动

如何禁止recyclerview的滚动时间

您如何使用 jQuery 测量用户向下滚动的距离?