检测点击Android中的对话窗口

时间:2011-08-16 12:43:38

标签: android dialog click

我有一个对话框:

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);

但是如何检测这个区域内的触摸? detect touches only in the area in red.

1 个答案:

答案 0 :(得分:8)

创建Dialog的扩展并覆盖必要的方法:dispatchTouchEventonTouchEvent(来自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);
}