Android RecyclerView(水平)嵌套在底板中,防止垂直滚动
我有一个Android RecyclerView(水平)嵌套在底板中,防止垂直滚动,android,android-recyclerview,androiddesignsupport,bottom-sheet,Android,Android Recyclerview,Androiddesignsupport,Bottom Sheet,我有一个回收视图,使用线性布局管理器,方向为水平,嵌套在框架布局中,使用底页行为 当尝试在RecyclerView上垂直拖动时,底页不响应拖动事件。这大概是因为具有水平方向的LayoutManager禁用了垂直滚动 我已尝试重写LinearLayoutManager.canScrollVertically()并返回true。这类作品。。如果以非常小心的方式垂直拖动,底页将响应。但是,一旦涉及任何水平移动,底板将停止响应垂直拖动事件 我不确定覆盖canscrollvertical()是否是正确的方
回收视图
,使用线性布局管理器
,方向为水平
,嵌套在框架布局
中,使用底页
行为
当尝试在RecyclerView
上垂直拖动时,底页不响应拖动事件。这大概是因为具有水平方向的LayoutManager
禁用了垂直滚动
我已尝试重写LinearLayoutManager.canScrollVertically()
并返回true。这类作品。。如果以非常小心的方式垂直拖动,底页将响应。但是,一旦涉及任何水平移动,底板
将停止响应垂直拖动事件
我不确定覆盖canscrollvertical()
是否是正确的方法——从用户体验的角度来看,它肯定感觉不正确
我还注意到,如果我使用ViewPager
而不是带有水平方向LayoutManager
的RecyclerView
,则底页会根据需要响应垂直滑动事件
是否有其他的布局管理器
,回收视图
,底部工作表行为
,或者其他方法可以帮助将垂直滚动事件传播到底部工作表行为
这里有一个问题的例子:
(问题可通过提交#f59a7031重现)
只需展开第一张底片 问题出在哪里?在框架布局中
<代码>底页
放入协调布局
时,效果完美。然后,BottomSheet
可以将它的滚动状态通过CoordinatorLayout
传递给其他视图,这些视图作为CoordinatorLayout
的直接子视图
为什么RecyclerView
无法将滚动状态传递到底页
?它不是CoordinatorLayout
的直接子对象。但有一种方法可以传递它们:RecyclerView
必须在实现和的视图中。答案是:
因此,您的fragment\u sheetX.xml
布局应该如下所示:
<?xml version="1.0" encoding="utf-8"?>
<android.support.v4.widget.NestedScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#fff"
android:orientation="vertical"
android:fillViewport="true">
<android.support.v7.widget.RecyclerView
android:id="@+id/recyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</android.support.v4.widget.NestedScrollView>
顺便说一句:MultiSheetView
是一个很好的功能,也是一种非常有趣的移动用户体验设计方法。我怀疑FrameLayout
会阻止滚动事件传播到协调布局
。我想我在某种程度上接近了这个解决方案,但在视口问题上遇到了麻烦。非常感谢。如果层次结构为:NestedScrollView->ConstraintLayout->RecylerView,则RecyclerView滚动行为不正确…我可以向下滚动,但不能向上滚动。当尝试向上滚动时,底部的页面(在本例中为NestedScrollView)会折叠…有什么想法吗?这种方法会导致RecyclerView
的高度相当于wrap_content
,这对性能非常糟糕,因为它会导致ViewHolder
为所有子级单独充气,而不会重复使用太多,这个答案解决了我的问题。