android RecyclerView 横向滚动为什么需要requestDisallowInterceptTouchEvent配置为true才行
当RecyclerView被嵌套在一个父级滚动容器中时,例如ScrollView或NestedScrollView,父级滚动容器会拦截触摸事件以进行垂直滚动。这会导致RecyclerView无法水平滚动。
为了解决这个问题,可以通过将RecyclerView的requestDisallowInterceptTouchEvent配置为true来阻止父级滚动容器拦截触摸事件。这样一来,当用户在RecyclerView上水平滚动时,父级滚动容器就不会拦截触摸事件,从而使RecyclerView可以正常水平滚动。
需要注意的是,仅当RecyclerView被水平滚动的布局管理器(例如LinearLayoutManager)管理时,才需要设置requestDisallowInterceptTouchEvent为true。如果使用的是垂直滚动的布局管理器(例如LinearLayoutManager的默认方向是垂直方向),则不需要这样设置。
以下是设置requestDisallowInterceptTouchEvent为true的示例代码:
recyclerView.setNestedScrollingEnabled(false);
recyclerView.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
v.getParent().requestDisallowInterceptTouchEvent(true);
return false;
}
});
在上述代码中,我们通过调用recyclerView.setNestedScrollingEnabled(false)来禁用RecyclerView的嵌套滚动。然后,我们在RecyclerView的触摸事件监听器中,将父级滚动容器的拦截触摸事件设置为true,以阻止父级滚动容器拦截触摸事件
原文地址: http://www.cveoy.top/t/topic/is8B 著作权归作者所有。请勿转载和采集!