具有 RecyclerView 的页面中 Persistent 或 Standard BottomSheet 的奇怪滚动行为和可见性

Weird scrolling behavior and visibility of Persistent or Standard BottomSheet in a page having RecyclerView

如图所示,RecyclerView 项目通过 Standard/Persistent BottomSheet 和 collapsing/expanding 可见BottomSheet 也不会出现在 Standard/Persistent BottomSheet 中。 RecyclerView 项目是可滚动的,但是当我在 Standard/Persistent BottomSheet 中执行任何类型的 activity 时,它会直接滚动 RecyclerView item behind this Standard/Persistent BottomSheet.

注意: BottomSheet 中使用的背景颜色为纯色。不透明

我想知道如何解决这个问题?

这是代码片段 ->

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_width="match_parent"
     android:layout_height="match_parent"
     tools:context="app.standardbottomsheet.ui.MainActivity">

    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:id="@+id/layout_container_1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        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_width="match_parent"
        android:layout_height="match_parent" />
</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_width="match_parent"
    android:layout_height="wrap_content"
    app:layout_behavior="@string/bottom_sheet_behavior">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/summary"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        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_width="?actionBarSize"
            android:layout_height="?actionBarSize"
            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_width="wrap_content"
            android:layout_height="wrap_content"
            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_width="match_parent"
        android:layout_height="wrap_content"
        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>

正如您在图片中看到的那样,您的底部 sheet 位于回收站视图的后面。要更改它,您必须更改 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_width="match_parent"
    android:layout_height="match_parent"
    tools:context="app.standardbottomsheet.ui.MainActivity">

    <androidx.recyclerview.widget.RecyclerView
        android:id="@+id/recycler_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <androidx.coordinatorlayout.widget.CoordinatorLayout
        android:id="@+id/layout_container_1"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        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,由顺序决定哪个在另一个之上。