如何在Kotlin中完全展开BottomSheetDialogFragment?

11

我能使用以下代码打开我的BottomSheetDialogFragment:

val bottomSheet = BottomSheetFragment()
bottomSheet.show(fragmentManager!!, "BottomSheet")

但它只展开显示了一半的内容 - 我希望在打开时它能够扩展到屏幕的全部高度,而无需将其向上拖动。

我已经搜索过了,看起来一种方法是将BottomSheetBehavior状态设置为STATE_EXPANDED,但我没有找到如何在Kotlin中实现此解决方案的解决方法。

任何帮助将不胜感激!

1个回答

41
你可以通过将以下代码放置在BottomSheetDialogFragmentonViewCreated函数中来设置BottomSheetBehavior的状态。
dialog.setOnShowListener { dialog ->
    val d = dialog as BottomSheetDialog
    val bottomSheet = d.findViewById<View>(R.id.design_bottom_sheet) as FrameLayout
    val bottomSheetBehavior = BottomSheetBehavior.from(bottomSheet)
    bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
}

您可能还想将 peak 高度设置为对话框的高度,以防止在尝试解除对话框时卡在一半。

bottomSheetBehavior.peekHeight = bottomSheet.height

4
好的,谢谢!我只需将findViewbyId参数更改为com.google.android.material.R.id.design_bottom_sheet,因为我正在使用Androidx。请注意,我的翻译不包括任何解释或其他信息。 - SQLol
1
运行得非常完美,同样@SQLol不得不将它从“R.id.design_bottom_sheet”更改为“com.google.android.material.R.id.design_bottom_sheet”,感谢! - Simon Gomes
bottomSheetBehavior.peekHeight = bottomSheet.height 设置的问题在于,当您向下滑动以关闭对话框时,对话框实际上并没有关闭,而是留下了一个灰色的重叠在屏幕上。 - Jean Tadebois
1
为避免出现灰色重叠,可以使用 bottomSheetBehavior.skipCollapsed = true - Jean Tadebois
请更新答案。@JeanTadebois的建议是将BottomSheetBehavior.skipCollapsed设置为true,以防止对话框卡在中途,这是更好/更清洁的选择。 - dknchris
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接