我有一个对话框:
final Dialog dialog = new Dialog(context);
dialog.setContentView(R.layout.location_dialog);
dialog.setTitle("My dialog");
dialog.setMessage("My dialog's content");
dialog.setCancelable(true);
dialog.setCanceledOnTouchOutside(true);
dialog.show();
我希望能够检测对话框行外的触摸。 我可以使用内置方法轻松检测对话框区域外的任何触摸
dialog.setCanceledOnTouchOutside(true);
但是如何检测这个区域内的触摸?
答案 0 :(得分:8)
创建Dialog的扩展并覆盖必要的方法:dispatchTouchEvent或onTouchEvent(来自docs:这对于处理在窗口范围之外发生的触摸事件最有用,其中没有视图收到它。)
更新:
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
Rect dialogBounds = new Rect();
getWindow().getDecorView().getHitRect(dialogBounds);
if (dialogBounds.contains((int) ev.getX(), (int) ev.getY())) {
Log.d("test", "inside");
} else {
Log.d("test", "outside");
}
return super.dispatchTouchEvent(ev);
}