gpt4 book ai didi

android - 如何创建适合工作表大小且 View 始终与底部对齐的 android Bottom Sheet ?

转载 作者:行者123 更新时间:2023-12-04 23:58:39 28 4
gpt4 key购买 nike

我在研究时很难弄清楚如何用这个词来表达这个,所以我在下面做了一个我想要实现的快速模型。我的应用程序有一个固定的 Bottom Sheet ,我希望根据工作表是展开还是半展开来调整工作表内容的大小。

我的工作表由一个回收站 View 和底部带有一些按钮的 View 组成。目前,工作表内容的大小总是像工作表完全展开一样。这意味着除非工作表完全展开并且大部分回收器 View 也隐藏在裁剪后的工作表后面,否则不会显示按钮。我想要发生的是按钮始终显示在工作表的底部,即使所述工作表已展开一半,并且 recyclerview 会填充剩余的任何空间。这在持久性 Bottom Sheet 中是否可能,如果现在,我应该使用什么方法来实现这一目标?非常感谢您的帮助。

Mockup

最佳答案

您可以通过使用 addBottomSheetCallback 回调跟踪 Bottom Sheet 滑动来设置其 y 坐标,使按钮布局始终显示在工作表底部:

val bottomSheet = findViewById<ConstraintLayout>(R.id.bottom_sheet)
val bottomLayout = findViewById<LinearLayout>(R.id.button_layout)

// initial setting the y coordinates of the bottom layout
bottomSheet.post {
val bottomSheetVisibleHeight = bottomSheet.height - bottomSheet.top
bottomLayout.y =
(bottomSheetVisibleHeight - bottomLayout.height).toFloat()
}

BottomSheetBehavior.from(bottomSheet).apply {

addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {
override fun onSlide(bottomSheet: View, slideOffset: Float) {

// set the y coordinates of the bottom layout on bottom sheet slide
val bottomSheetVisibleHeight = bottomSheet.height - bottomSheet.top
bottomLayout.y =
(bottomSheetVisibleHeight - bottomLayout.height).toFloat()
}

override fun onStateChanged(bottomSheet: View, newState: Int) {
}
})
}

布局:

<?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"
android:layout_width="match_parent"
android:layout_height="match_parent">

<!-- Main Layout -->
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent">

</androidx.constraintlayout.widget.ConstraintLayout>

<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:behavior_hideable="false"
app:layout_behavior="@string/bottom_sheet_behavior">

<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#CFE2F3"
app:layout_constraintBottom_toTopOf="@+id/button_layout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />

<LinearLayout
android:id="@+id/button_layout"
android:layout_width="match_parent"
android:layout_height="60dp"
android:background="#FF03DAC5"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent">

<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginStart="8dp"
android:layout_marginEnd="40dp"
android:layout_weight="1"
android:text="cancel" />

<Button
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_marginEnd="8dp"
android:layout_weight="1"
android:text="ok" />

</LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

关于android - 如何创建适合工作表大小且 View 始终与底部对齐的 android Bottom Sheet ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71176797/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com