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