【问题标题】:Persistent Bottom Sheet in AndroidXAndroidX 中的持久底页
【发布时间】:2019-12-11 05:59:05
【问题描述】:

layout_behavior - android.support.design.widget.BottomSheetBehavior 不工作

此视图在运行时不受垂直限制,它会跳转

我仅在 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>

【问题讨论】:

    标签: android android-support-library androidx bottom-sheet material-components


    【解决方案1】:

    由于您使用的是 androidx 库,因此您必须使用 Material Components Library
    使用类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

    【讨论】:

    • 有什么方法可以使持久性底页的背景透明或设置透明吗?
    【解决方案2】:

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

    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">
    

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

    【讨论】:

      【解决方案3】:

      你可以尝试垂直约束LinearLayout吗?

      app:layout_constraintBottom_toBottomOf="parent"
      

      【讨论】:

        【解决方案4】:

        通过替换解决错误

        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>
        

        【讨论】:

          猜你喜欢
          • 2017-02-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-07
          • 1970-01-01
          • 2021-07-17
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多