Dialog解雇延迟 - Android

时间:2016-04-14 10:24:18

标签: android dialog

我有一个对话框,我希望在延迟一段时间后可以在外面触摸它。

如果我这样做 -

dialog.setCanceledOnTouchOutside(false);

并为基础视图添加触控侦听器

 listview.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View view, MotionEvent motionEvent) {
                (new Handler()).postDelayed(new Runnable() {
                    @Override
                    public void run() {
                         dialog.dismiss();
                    }
                }, 500);
            }
            return false;
        }
    });
显然它不会起作用,因为我已经让它无法取消。

但如果我这样做 -

 dialog.setCanceledOnTouchOutside(true);

我无法控制解雇的延误。

任何窗口属性等我可以用来控制它吗?如何跟踪外部对话触摸事件?

1 个答案:

答案 0 :(得分:1)

您可以创建自定义Dialog覆盖onTouchEvent

private class MyDialog extends Dialog{

        // constructors

        @Override
        public boolean onTouchEvent(MotionEvent event) {
            Rect dialogRect = new Rect();
            getWindow().getDecorView().getHitRect(dialogRect);

            if (!dialogRect.contains((int) event.getX(), (int) event.getY())) {
                try {
                    Thread.sleep(500);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                this.cancel();
            }

            return super.onTouchEvent(event);
        }
    }

然后您应该“手动”创建Dialog

 MyDialog myDialog = new MyDialog(this);
 myDialog.setTitle("Dialog Title");
 myDialog.setContentView(R.layout.dialog_layout);
 myDialog.show();