BottomSheetDialogFragment允许用户触摸外部



我正在尝试从视频列表中启动底部表格段fragment,一旦打开,视频将播放,但是我想允许用户从列表中选择其他视频,而bottomsheetdialogogment则是打开。

我尝试的是:

   <style name="CustomBottomSheetDialogTheme" parent="Theme.Design.Light.BottomSheetDialog">
    <item name="bottomSheetStyle">@style/CustomBottomSheetStyle</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowContentOverlay">@null</item>
    <item name="android:colorBackground">@android:color/transparent</item>
    <item name="android:backgroundDimEnabled">false</item>
    <item name="android:backgroundDimAmount">0</item>
    <item name="android:windowFrame">@null</item>
    <item name="android:windowIsFloating">true</item>
</style>
<style name="CustomBottomSheetStyle" parent="Widget.Design.BottomSheet.Modal">
    <item name="android:background">@android:color/transparent</item>
</style>

和:

    @SuppressLint("RestrictedApi")
override fun setupDialog(dialog: Dialog?, style: Int) {
    super.setupDialog(dialog, style)
    dialog?.window?.setFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE)
    dialog?.window?.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND)
    dialog?.setCanceledOnTouchOutside(false)
    dialog?.setCancelable(false)
}

以上所有内容都在对话范围内起作用,但不在底部表面段。

我认为您想念的东西是下面的。将其添加到您的dialog.setOnShowListener

it.findViewById<View>(R.id.touch_outside)?.apply {
   setOnTouchListener { v, event ->
      event.setLocation(event.rawX - v.x, event.rawY - v.y)
            
      activity?.dispatchTouchEvent(event)
      false
   }
}

坐标更改是必要的,因为此模态在不同的装饰视图中。否则,点击可能位于另一个位置。但是,当您在后面有一些输入字段时存在问题 - 到目前为止,我还没有正确地显示键盘;我添加了窗口标志FLAG_NOT_FOCUSABLE,但它仍然显示模式下的键盘(不下几,模态封面是键盘)。

最新更新