关于BottomSheetDialogFragment使用过程中常见的一些问题

问题汇总

1.默认白底去除

BottomSheetDialogFragment布局默认有个白色背景, 当你给布局加圆角时就会发现这个问题, 如果我们要将这个背景改为透明, 可采用以下做法:

1
2
3
4
5
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
//去除默认的白底
(binding.root.parent as? View)?.setBackgroundColor(Color.TRANSPARENT)
}

2.下滑后弹窗未完全关闭 半透明蒙层还在

我们一般会配合setDimAmount()函数来这只弹窗的背景透明度, 比如:

1
2
3
4
override fun onStart() {
super.onStart()
dialog?.window?.setDimAmount(0.6f)
}

如果peekHeight属性值没有设置到位的话, 比如设置为0, 就容易出现下滑关闭弹窗后半透明背景依旧存在, 需要再点一次才会消失, 实际上是因为弹窗未完全关闭导致的, 解决方法是将布局的实际高度赋值给peekHeight, 代码如下:

1
2
3
4
5
6
7
8
9
10
11
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val onGlobalLayoutListener = ViewTreeObserver.OnGlobalLayoutListener {
val dialog = dialog as BottomSheetDialog
val bottomSheet =
dialog.findViewById<View>(com.google.android.material.R.id.design_bottom_sheet) as FrameLayout?
val behavior = BottomSheetBehavior.from(bottomSheet!!)
behavior.state = BottomSheetBehavior.STATE_EXPANDED
behavior.peekHeight = view.height
}
}

本文为作者原创转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

0%