BottomSheetDialogFragment允许用户触摸外部

时间:2019-02-21 02:14:55

标签: android bottom-sheet dialogfragment

我正在尝试从视频列表中启动BottomSheetDialogFragment,一旦打开,将播放视频,但是我想允许用户在BottomSheetDialogFragment打开时从列表中选择其他视频。

我尝试过的事情:

   <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)
}

以上所有内容都可以在DialogFragment中使用,但不能在BottomSheetDialogFragment中使用。

1 个答案:

答案 0 :(得分:1)

我认为您想念的东西如下所示;将其添加到您的 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 但它仍然在模态下显示键盘(不是下面,模态覆盖键盘)。