具有 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但适配器具有数据集)

具有垂直和水平滚动的 Recyclerview

在基于测验的应用程序中具有嵌套 setOnClickListener 的 RecyclerView

如何仅在 recyclerview 中显示具有特定值的数据

如何在具有多个edittext的recyclerview中验证和设置错误?