android 带有底部粘性按钮的BottomSheetDialogFragment

ggazkfy8  于 2023-10-14  发布在  Android
关注(0)|答案(5)|浏览(181)

我在BottomSheetDialogFragment中显示按钮时遇到了一些问题。我希望它能粘在我的底部表的底部,无论表是扩大或折叠。
见下图:

(我用sketch创建了这个)
有什么窍门吗?
为了以防万一,如果你知道如何在bottomsheetdialog上添加上边距,我也很想知道这一点;)

nxowjjhe

nxowjjhe1#

谢谢,@Gnocalo,帖子。我已经实现了它,请在我的github中找到它
步骤:

  • 查找parent视图BottomSheetDialogFragment
  • 膨胀您的自定义视图并将其附加到parent视图
  • 调整底部工作表的边距以避免视图重叠

okxuctiv

okxuctiv2#

我处理这个问题的方法如下:
1.实现BottomSheetDialogFragment
1.覆盖打开对话框
1.获取bottomSheetDialog的引用并设置onShowDialog
1.从我的布局中删除按钮,并将其添加到R.id.container(当然,您可以以图解方式创建自己的按钮,我这样做是为了更容易格式化按钮视图)。这样你的按钮就会在R.id.design.bottom.sheet上,因为R.id.container是它的父级!
示例代码如下:

val bottomSheetDialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog
    bottomSheetDialog.setOnShowListener {
        val dialog = it as BottomSheetDialog

            dialog.findViewById<FrameLayout>(com.google.android.material.R.id.design_bottom_sheet) as FrameLayout
        val containerLayout: FrameLayout =
            dialog.findViewById<FrameLayout>(com.google.android.material.R.id.container) as FrameLayout
        val button = binding.submitButton
        val parent = button.parent as ViewGroup
        parent.removeView(button)
        containerLayout.addView(button, containerLayout.childCount)
    }
    return bottomSheetDialog

这样你的底部工作表将正常响应触摸和按钮将停留在它的位置上的父。
如果你有任何疑问,请随时询问。

编辑

不要忘记定义布局参数/将按钮定位在R.id.container的底部

sr4lhrrt

sr4lhrrt4#

我正在寻找一个粘性底部按钮的解决方案,虽然想回答你的额外问题,关于设置底部工作表保证金。
所以你不能在底部工作表中添加边距,它基本上是由底部工作表的状态处理的。
您可以通过以下方式显式设置底部工作表的状态:

val bottomSheet = dialog!!.findViewById<View>(design_bottom_sheet) as FrameLayout
val behavior: BottomSheetBehavior<*> = BottomSheetBehavior.from<View>(bottomSheet)
behavior.state = BottomSheetBehavior.STATE_HALF_EXPANDED
mitkmikd

mitkmikd5#

为了实现上述功能,您可以使用在回收器视图上设置为true的constrainedHeight。此外,约束回收器底部到顶部的按钮和按钮约束结束。参考下面的代码

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <androidx.recyclerview.widget.RecyclerView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/recycler_view"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constrainedHeight="true"
        app:layout_constraintBottom_toTopOf="@id/button"/>

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"/>

</androidx.constraintlayout.widget.ConstraintLayout>

相关问题