具有 RecyclerView 的页面中 Persistent 或 Standard BottomSheet 的奇怪滚动行为和可见性
Posted
技术标签:
【中文标题】具有 RecyclerView 的页面中 Persistent 或 Standard BottomSheet 的奇怪滚动行为和可见性【英文标题】:Weird scrolling behavior and visibility of Persistent or Standard BottomSheet in a page having RecyclerView 【发布时间】:2021-10-12 02:35:23 【问题描述】:如图所示,RecyclerView 项通过 Standard/Persistent BottomSheet 可见,并且在 Standard/Persistent 中也不会发生 BottomSheet 的折叠/展开底页。 RecyclerView 项目是可滚动的,但是当我在 Standard/Persistent BottomSheet 中执行任何类型的活动时,它会直接滚动此 后面的 RecyclerView 项目标准/持久底页。
注意: BottomSheet 中使用的背景颜色是纯色。它不透明。
我想知道如何解决这个问题?
这里是代码 sn-p ->
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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/layout_container_main"
android:layout_
android:layout_
tools:context="app.standardbottomsheet.ui.MainActivity">
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/layout_container_1"
android:layout_
android:layout_
app:layout_constraintBottom_toBottomOf="parent"
tools:context="app.standardbottomsheet.ui.MainActivity">
<include
android:id="@+id/included_layout_standard_bottom_sheet"
layout="@layout/layout_standard_bottom_sheet" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_list"
android:layout_
android:layout_ />
</androidx.constraintlayout.widget.ConstraintLayout>
layout_standard_bottom_sheet.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/layout_container_bottom_sheet"
android:layout_
android:layout_
app:layout_behavior="@string/bottom_sheet_behavior">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/summary"
android:layout_
android:layout_
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/thumbnail"
android:layout_
android:layout_
android:src="@mipmap/ic_launcher"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.appcompat.widget.AppCompatTextView
android:id="@+id/title"
android:layout_
android:layout_
android:text="@string/app_name"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toRightOf="@id/thumbnail"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<com.google.android.material.slider.Slider
android:id="@+id/progress"
android:layout_
android:layout_
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@id/summary" />
</androidx.constraintlayout.widget.ConstraintLayout>
【问题讨论】:
recyclerView 正在滚动,因为它看起来像底部工作表在 recyclerView 后面,并且触摸事件仅被 recyclerView 拦截,我认为没有到达底部工作表 【参考方案1】:正如您在图片中看到的那样,您的底页位于回收站视图的后面。要改变这一点,你必须在activity_main.xml
中更改 recyclerview 和 coordinatelayour 的顺序
你可以这样改顺序试试
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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/layout_container_main"
android:layout_
android:layout_
tools:context="app.standardbottomsheet.ui.MainActivity">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycler_list"
android:layout_
android:layout_ />
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:id="@+id/layout_container_1"
android:layout_
android:layout_
app:layout_constraintBottom_toBottomOf="parent"
tools:context="app.standardbottomsheet.ui.MainActivity">
<include
android:id="@+id/included_layout_standard_bottom_sheet"
layout="@layout/layout_standard_bottom_sheet" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
由于 recycler view 和 CoordinatorLayout 都是match_parent
,所以顺序决定哪个在另一个之上。
【讨论】:
现在可以正常工作了兄弟...我在这个小问题上花了 2 天...Grrr。非常感谢您消除疑虑并解决此问题... :-)以上是关于具有 RecyclerView 的页面中 Persistent 或 Standard BottomSheet 的奇怪滚动行为和可见性的主要内容,如果未能解决你的问题,请参考以下文章
在 NestedScrollView 中使用两个具有不同适配器的 RecyclerView 加载速度非常慢
从recyclerview中删除项目(viewholder具有onClick但适配器具有数据集)