BottomSheetDialogFragment允许用户在外部触摸取消。

3

我正在尝试从视频列表中启动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中不行。


不确定BottomSheetDialogFragment,但是你可以使用 android.support.design.widget.BottomSheetBehaviorLayout 实现类似的功能。 - ADM
你找到解决方案了吗? - elementstyle
@elementstyle 是的,我做了。我使用了FragmentManager的“add”方法,而不是显示底部表单。这对我很有效,因为我有一个单一活动多个片段的应用程序。 - Roudi
我回答了这个问题,请查看此链接:https://dev59.com/XrPma4cB1Zd3GeqPn0jI#58689894 - mohsen
1个回答

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,但它仍然在模态框下方显示键盘(而不是在下面)。

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