Activity 的对话片段和取消触摸

Dialog Fragment and Dismissing Touches to Activity's Views

我有一个 activity 和一个 dialog fragment。我所做的是当显示 dialog fragment 并且用户单击外部对话框片段时,显示 Alert dialog.

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    return object: Dialog(activity!!, theme) {
        override fun onTouchEvent(event: MotionEvent): Boolean {
            if (MotionEvent.ACTION_OUTSIDE == event.action) {
                presentAlertDialog()
                return true
            }

            return super.onTouchEvent(event)
        }

    }.apply {
        setCanceledOnTouchOutside(false)
        setCancelable(false)

        window?.apply {
            setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL)
            setFlags(WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH, WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH)
        }
    }

如果用户 clickedactivity 没有视图,则没有问题。但是,当用户单击时有一个视图(例如 button )时, alert dialog 和该视图的 onClickListener 都会被调用。我想做的只是显示 alert dialog 并使 activity 的视图忽略该触摸。有办法吗?提前致谢!

编辑:为了更清楚,我添加了一个屏幕截图:

我想要的是当用户触摸对话框片段外部(即 "Waiting" )和注册按钮(或任何其他)内部时,我想显示一个警告对话框并希望关闭注册的 onClickListener那一抹。

好吧,我想我有点理解你有两个对话框,当有人在第一个对话框之外单击时你想打开另一个。这是实现此目标的方法。

先设置dialog.setCanceledOnTouchOutside(true);然后实现cancel()监听器

dialog.setOnCancelListener(
    new DialogInterface.OnCancelListener() {
        @Override
        public void onCancel(DialogInterface dialog) {
            //Open another dialog here
        }
    });

最好使用它而不是自己处理 onTouchEvent。希望这有助于让我知道是否还有任何问题。如果有时间,我可能会写一些代码。干杯!