我有一个
DialogFragment
,其中包含 ProgressBar
。我想要做的是每当用户在对话框片段的窗口外单击时显示 AlertDialog
。在对话框片段的 onCreateView
中,我可以通过调用 setOnTouchListener
查看即将创建的内容来检测对话框片段内的触摸事件。如何检测对外部的触摸?
按照另一个 stackoverflow 问题的建议,我尝试设置标志:
val dialogWindow = dialog.window
dialogWindow?.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL)
dialogWindow?.setFlags(WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH)
但无法检测到
setOnTouchListener
中的触摸。
class MyDialogFragment : DialogFragment() {
override fun onCreateDialog(savedInstanceState: Bundle?)
: Dialog {
return object : Dialog(activity, theme){
override fun onTouchEvent(event: MotionEvent?)
: Boolean {
// Here you can handle the touch event
return super.onTouchEvent(event)
}
}
}
}
也称为
setCanceledOnTouchOutside(false)
,因为触摸对话框外部会自动将其关闭。
试试这个代码
dialog.window?.decorView?.setOnTouchListener {
}