我有一个使用LinearLayoutManager
和HORIZONTAL
方向的RecyclerView
,嵌套在使用BottomSheet Behavior
的FrameLayout
中。
当尝试在RecyclerView
上垂直拖动时,BottomSheet
不响应拖动事件。可能是因为对于水平方向的LayoutManager
,禁用了垂直滚动。
我尝试重写LinearLayoutManager.canScrollVertically()
并返回true。这种方法“有点”有效...如果您以非常小心的方式垂直拖动,则BottomSheet
将会响应。但是,只要涉及任何水平移动,BottomSheet
就停止响应垂直拖动事件。
我不确定在这里覆盖canScrollVertically()
是否是正确的方法-从用户体验的角度来看,它肯定不太合适。
我还注意到,如果我使用具有水平方向LayoutManager
的ViewPager
而不是RecyclerView
,则BottomSheet
会按预期响应垂直滑动事件。
是否有其他LayoutManager
、RecyclerView
、BottomSheet Behavior
或其他方法可以帮助将垂直滚动事件传播到BottomSheet Behavior
?
这里有一个问题的示例:
https://github.com/timusus/bottomsheet-test (使用提交#f59a7031可以重现问题)
只需展开第一个底部工作表。
FrameLayout
阻止滚动事件传播到CoordinatorLayout
。我认为我曾经接近解决方案,但在视口问题上遇到了麻烦。非常感谢。 - Tim MalseedRecyclerView
的高度等同于wrap_content
,这对性能非常糟糕,因为它会导致为所有子项逐个膨胀ViewHolder
而没有重用。 - Josh