Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 带底部粘性按钮的BottomSheetDialogFragment_Android_Bottom Sheet - Fatal编程技术网

Android 带底部粘性按钮的BottomSheetDialogFragment

Android 带底部粘性按钮的BottomSheetDialogFragment,android,bottom-sheet,Android,Bottom Sheet,在我的对话框片段中显示按钮时遇到一些问题。我想让它粘在我的底部工作表的底部,无论工作表是展开还是折叠 见下图: (我用草图创建了这个) 有什么窍门吗 为了以防万一,如果您知道如何在底部页签对话框中添加上页边距,我也想知道这一点;) 我处理这个问题的方式如下: val bottomSheetDialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog bottomSheetDialog.setOnSh

在我的
对话框片段中显示按钮时遇到一些问题。我想让它粘在我的底部工作表的底部,无论工作表是展开还是折叠

见下图:

(我用草图创建了这个)

有什么窍门吗


为了以防万一,如果您知道如何在
底部页签对话框中添加上页边距,我也想知道这一点;)

我处理这个问题的方式如下:

    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
  • 实现一个对话框片段
  • 重写onCreate对话框
  • 获取bottomSheetDialog的引用并设置onShowListener
  • 从我的布局中删除按钮并将其添加到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
    
    val bottomSheetDialog=super.onCreateDialog(savedInstanceState)作为bottomSheetDialog
    bottomSheetDialog.setOnShowListener{
    val dialog=它作为BottomSheetDialog
    findviewbyd(com.google.android.material.R.id.design\u bottom\u sheet)作为框架布局
    val容器布局:框架布局=
    作为框架布局的dialog.findviewbyd(com.google.android.material.R.id.container)
    val按钮=binding.submitButton
    val parent=button.parent作为视图组
    parent.removeView(按钮)
    containerLayout.addView(按钮,containerLayout.childCount)
    }
    返回对话框
    
    这样,您的下页将正常响应触摸,按钮将保持在其在父页上的位置

    如果您有任何疑问,请随时提问

    编辑


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

    谢谢,@Gnocalo,post。我已经实现了它,请在我的

    步骤:

    • 查找
      parent
      视图
      BottomSheetDialogFragment
    • 为自定义视图充气并将其附加到父视图
    • 调整底部图纸的边距以避免视图重叠

    可能需要一段时间,但我面临同样的问题,所以我决定写一篇文章:

    您已经找到了解决方案吗?您好!不幸的是,我没有找到解决方案,屏幕也没有经过验证,所以我们找到了一个解决办法。我想你可以试着用MotionLayout做这样的事情。它在阿尔法,但我玩它,它是如此强大,除了好玩。如果你有点好奇和冒险,试试看!我相信你可以接近这一点。嗨,谢谢你对MotionLayout的提示。这看起来真的很强大,我来试试。你的github链接好像断了。你能更新一下吗