点击外部安卓对话框以关闭它?

我想知道是否有可能以某种方式点击弹出对话框(或具有对话框主题的活动),然后通过点击外部来关闭它?

我做了一个快速的图片来说明它:

enter image description here

通常,您必须按后退键才能关闭对话框,但是在Honeycomb上,由于所有屏幕空间,可以选择在对话框外部点击可能会很棒。


答案 1
dialog.setCanceledOnTouchOutside(true) 

设置在窗口边界外触摸此对话框时是否取消此对话框。


答案 2

我的应用是使用 Theme.Holo.Dialog 的单个活动。在我的情况下,另一个答案不起作用。它只使其他后台应用程序或启动屏幕接收触摸事件。

我发现使用dispatchTouchEvent在我的情况下工作。我认为这也是一个更简单的解决方案。下面是一些示例代码,说明如何使用它来检测具有对话框主题的活动外部的点击:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    Rect dialogBounds = new Rect();
    getWindow().getDecorView().getHitRect(dialogBounds);

    if (!dialogBounds.contains((int) ev.getX(), (int) ev.getY())) {
        // Tapped outside so we finish the activity
        this.finish();
    }
    return super.dispatchTouchEvent(ev);
}

推荐