AndroidX 中的持久底部 Sheet

Persistent Bottom Sheet in AndroidX

layout_behavior - android.support.design.widget.BottomSheetBehavior is not working

this view is not constrained vertically at runtime it will jump

我仅在 Androidx 中遇到此错误。那么我该如何解决这个错误。

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#efefef"
    tools:context=".MainActivity">


    <include layout="@layout/content_main" />

    <!-- Adding bottom sheet after main content -->
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/bottom_sheet"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#fff"
        android:orientation="vertical"
        android:padding="10dp"
        app:behavior_hideable="true"
        app:behavior_peekHeight="56dp"
        app:layout_behavior="android.support.design.widget.BottomSheetBehavior">

        ...... child layouts..


    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

尝试将这些属性添加到您的线性布局和其他组件中:

app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"

因此您的线性布局应如下所示:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:app="http://schemas.android.com/apk/res-auto"
            android:id="@+id/bottom_sheet"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="#fff"
            android:orientation="vertical"
            android:padding="10dp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:behavior_hideable="true"
            app:behavior_peekHeight="56dp"
            app:layout_behavior="android.support.design.widget.BottomSheetBehavior">

并将这三个属性也添加到约束布局的所有直接子布局中。

你能尝试垂直约束 LinearLayout 吗?

app:layout_constraintBottom_toBottomOf="parent"

通过替换解决错误

androidx.constraintlayout.widget.ConstraintLayout 

androidx.coordinatorlayout.widget.CoordinatorLayout 

app:layout_behavior="android.support.design.widget.BottomSheetBehavior"

app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"

在activity_main.xml

正确的代码是。

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="#efefef"
    tools:context=".MainActivity">


    <include layout="@layout/content_main" />

    <!-- Adding bottom sheet after main content -->
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:id="@+id/bottom_sheet"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#fff"
        android:orientation="vertical"
        android:padding="10dp"
        app:behavior_hideable="true"
        app:behavior_peekHeight="56dp"
        app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">

        ...... child layouts..


    </LinearLayout>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

由于您使用的是 androidx 库,因此您必须使用 Material Components Library
使用 class com.google.android.material.bottomsheet.BottomSheetBehavior 而不是 android.support.design.widget.BottomSheetBehavior:

<LinearLayout     
  app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
..>

或:

   <LinearLayout     
      app:layout_behavior="@string/bottom_sheet_behavior"
    ..>

同时将 ConstraintLayout 更改为 CoordinatorLayout