安卓 - 如何禁用RecyclerView点击后的自动滚动

4
自API 24起,RecyclerView将在用户点击部分显示的项目时自动滚动到该项目。 如何禁用此功能?
support-library 25.0.1之前,可以使用以下代码。
@Override
    public boolean requestChildRectangleOnScreen(View child, Rect rect, boolean immediate) {
        Object tag = child.getTag();
        if( tag != null && tag.toString().equalsIgnoreCase("preventAutoScroll") ){
            return false;
        }
        return super.requestChildRectangleOnScreen(child, rect, immediate);
    }

它必须是可聚焦和可点击的,因为它是一个 TextView,文本需要可选择。

2个回答

6

在recycler view上设置一个被覆盖的布局管理器版本。在我的情况下,当某个子视图获得焦点时,我想要禁用它。

LinearLayoutManager linearLayoutManager = new LinearLayoutManager(context) {
        @Override
        public boolean requestChildRectangleOnScreen(RecyclerView parent, View child, Rect rect, boolean immediate, boolean focusedChildVisible) {

            if (((ViewGroup) child).getFocusedChild() instanceof YourFocusableChildViewClass) {                    
                return false;
            }

            return super.requestChildRectangleOnScreen(parent, child, rect, immediate, focusedChildVisible);
        }
    };

我在RecyclerView中没有这个方法,你使用了第三方库吗? - Kimi Chiu
2
我在“LayoutManager”中找到了它。运行得非常好! - Kimi Chiu
我在哪里可以找到 YourFocusableChildViewClass - Aldan
你的可聚焦子视图类 =例如=> EditText - Hassan Badawi

0
一个适用于整个应用的解决方案。
在 AndroidManifest.xml 中,将活动的 windowSoftInputMode 设置为 adjustPan。
<activity
    android:name=".YourActivity"
    android:windowSoftInputMode="adjustPan">
</activity>

这样可以防止布局在软键盘出现时被调整大小,从而停止自动滚动。 adjustpan 文档
活动的主窗口不会被调整大小以为软键盘腾出空间。相反,窗口的内容会自动平移,以确保当前焦点不被键盘遮挡,用户始终可以看到他们正在输入的内容。与调整大小相比,这通常不太理想,因为用户可能需要关闭软键盘才能访问和操作窗口中被遮挡的部分。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接