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 bottomSheet = dialog!!.findViewById<View>(design_bottom_sheet) as FrameLayout
val behavior: BottomSheetBehavior<*> = BottomSheetBehavior.from<View>(bottomSheet)
behavior.state = BottomSheetBehavior.STATE_HALF_EXPANDED
5条答案
按热度按时间nxowjjhe1#
谢谢,@Gnocalo,帖子。我已经实现了它,请在我的github中找到它
步骤:
parent
视图BottomSheetDialogFragment
parent
视图okxuctiv2#
我处理这个问题的方法如下:
1.实现BottomSheetDialogFragment
1.覆盖打开对话框
1.获取bottomSheetDialog的引用并设置onShowDialog
1.从我的布局中删除按钮,并将其添加到R.id.container(当然,您可以以图解方式创建自己的按钮,我这样做是为了更容易格式化按钮视图)。这样你的按钮就会在R.id.design.bottom.sheet上,因为R.id.container是它的父级!
示例代码如下:
这样你的底部工作表将正常响应触摸和按钮将停留在它的位置上的父。
如果你有任何疑问,请随时询问。
编辑
不要忘记定义布局参数/将按钮定位在R.id.container的底部
8ljdwjyq3#
可能需要一段时间,但我遇到了同样的问题,所以我决定写一篇文章:https://dorianpavetic.medium.com/android-sticky-view-at-the-bottom-of-bottom-sheet-dialog-fragment-ac91242bc1b7
sr4lhrrt4#
我正在寻找一个粘性底部按钮的解决方案,虽然想回答你的额外问题,关于设置底部工作表保证金。
所以你不能在底部工作表中添加边距,它基本上是由底部工作表的状态处理的。
您可以通过以下方式显式设置底部工作表的状态:
mitkmikd5#
为了实现上述功能,您可以使用在回收器视图上设置为true的constrainedHeight。此外,约束回收器底部到顶部的按钮和按钮约束结束。参考下面的代码