带有底部粘滞按钮的BottomSheetDialogFragment

时间:2017-11-29 12:07:49

标签: android bottom-sheet

我在BottomSheetDialogFragment中显示按钮时出现问题。无论纸张是否展开或折叠,我都希望它能粘在底部纸张的底部。

见下图:

What I want to do

(我用草图创造了这个)

任何提示或技巧?

以防万一,如果您知道如何为bottomsheetdialog添加上边距,我也很想知道这一点;)

3 个答案:

答案 0 :(得分:1)

谢谢@Gnocalo,发帖。我已经实现了它,请在我的github

中找到它

步骤:

  • 找到parent视图BottomSheetDialogFragment
  • 扩大您的自定义视图并将其附加到parent视图
  • 调整底部页边距,以避免视图重叠

enter image description here

答案 1 :(得分:0)

我解决此问题的方法如下:

  1. 实施BottomSheetDialogFragment
  2. 覆盖onCreateDialog
  3. 获取bottomSheetDialog的引用并设置onShowListener
  4. 从我的布局中删除按钮,并将其添加到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的底部

答案 2 :(得分:0)

可能需要一段时间,但我遇到了同样的问题,所以我决定写一篇文章: Mozilla doc

相关问题