对话框片段和检测窗口外部的触摸

问题描述 投票:0回答:2

我有一个

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
中的触摸。

java android kotlin android-dialogfragment
2个回答
4
投票
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)
,因为触摸对话框外部会自动将其关闭。


0
投票

试试这个代码

dialog.window?.decorView?.setOnTouchListener {
    
}
© www.soinside.com 2019 - 2024. All rights reserved.