我有一个视图,它的作用类似于BottomSheetBe的行为,这个视图里面有ViewPager2。每个ViewPager2的页面都是一个垂直的回收器视图。问题是,当当前的垂直回收器视图(这是ViewPenger的一个页面)不能再垂直滚动时,BOTOSheet不会向下滚动。当我只有一个垂直的回收器视图时,一切都正常工作。
临时解决方案是用NestedScrollView包装ViewPager,但它的性能很差,而且有自己的bug。
原始布局:
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/core"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#C7C7C7"
tools:context=".MainActivity">
<LinearLayout
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#FFFFFF"
android:elevation="8dp"
android:orientation="vertical"
app:behavior_hideable="true"
app:behavior_peekHeight="300dp"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="wrap_content"
android:layout_height="24dp"
android:layout_gravity="center_horizontal"
app:tabGravity="center"
app:tabMode="scrollable" />
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
[下面是它的样子(抱歉gif质量)]
我已经找到了这种情况的解决方案,我为内部RecyclerView设置了isNestedScrollingEnabled=false
,以便BottomSheetBehavior找到另一个滚动视图
viewPager.children.find { it is RecyclerView }?.let {
(it as RecyclerView).isNestedScrollingEnabled = false
}
BottomSheetBehavior仅检测第一个可滚动视图。因此,始终建议在其中仅使用一个可滚动视图。
有关更多信息,请查看此答案底部表行为与两个回收器视图
这一个也滚动不工作的多个RecyclerView在底板
如果你真的想有两个可滚动的视图,我推荐你看看这个库和AndroidSlidingUpPanel