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链接好像断了。你能更新一下吗