我有一个相当复杂的 BottomSheetLayout
,其布局如下
我的底部工作表的根视图是一个自定义FrameLayout
,可以自定义其底角(包括背景和子级)。其他(与触摸无关)
然后,我使用通常的ConstraintLayout
来布置我的底表。
此ConstraintLayout
除其他视图外还包含垂直 RecyclerView
:
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp">
<!-- other views -->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/events"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="25dp"
android:layout_marginBottom="74dp"
app:layout_constraintTop_toBottomOf="@+id/days"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@{viewModel.colors.defaultBackgroundColor}"
tools:background="#ECF0F3"
android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/event_item"
tools:itemCount="10" />
</androidx.constraintlayout.widget.ConstraintLayout>
拖动底页时没有特别的问题,但是,当完全展开时,我希望能够滚动RecyclerView
的内容。但是我不能。
经过大量研究,我设法通过在Fragment
的视图膨胀时启用滚动来使其滚动:
ViewCompat.setNestedScrollingEnabled(this.binding.bottomSheetEvents.getRoot(), true);
但是,这样做有一个奇怪的结果。当我的底部工作表的状态为EXPANDED
时,我终于可以滚动RecyclerView
了,但是绝对没有办法再拖动我的底部工作表了:它仍然完全展开。
我尝试了其他几种方法。
NestedScrollView
。根据过去的经验,由于NestedScrollView
,我可以滚动显示底部的全部内容,但是在这种情况下,我只想滚动RecyclerView
。之上的一切都必须保持闲置状态。this.binding.bottomSheetEvents.events.setNestedScrollingEnabled(false);
累了,但没什么区别。我的信念是,当底部工作表完全展开时,它会将滚动事件分派给可以支持它的内部子级。而且,倒退,它知道在某个时候何时使用希望折叠所述底片。所以我想那里肯定发生了什么问题。
更多信息:
CoordinatorLayout
。CoordinatorLayout
一起托管在AppBar
中app:layout_behavior="@string/bottom_sheet_behavior"
behavior_fitToContents
设置为 false ,因此我可以使用方法setExpandedOffset
来防止底部页面到达顶部。感谢您的帮助!