我有一个对话框,我希望在延迟一段时间后可以在外面触摸它。
如果我这样做 -
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);
我无法控制解雇的延误。
任何窗口属性等我可以用来控制它吗?如何跟踪外部对话触摸事件?
答案 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();