如何在对话框外点击以关闭对话框?

177

我已经为我的应用程序实现了一个自定义对话框。我希望在用户单击对话框外部时,对话框会被关闭。 我需要做什么才能实现这一功能?

14个回答

1

从您的活动/片段中调用 dialog.setCancelable(false);


0

您可以使一个占据整个屏幕大小的背景变为透明,并监听onClick事件以dismiss它。


10
糟糕的回答!当然可以做,但请用正确的方式去做! - j.c

0

我尝试了一些答案,但仍然遇到了一个问题,就是当我点击对话框外部时,对话框会隐藏,但是一个暗淡的视图仍然显示着,再次点击会回到父活动。但实际上,我想在第一次点击后就返回到父活动。 所以我做的是

dialog.setOnCancelListener(this);

并将我的活动更改为实现DialogInterface.OnCancelListener

@Override
public void onCancel(DialogInterface dialog) {
     finish();
}

然后,它就奏效了。


-1

这里是代码

    dialog.getWindow().getDecorView().setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent ev) {

            if(MotionEvent.ACTION_DOWN == ev.getAction())
            {
                Rect dialogBounds = new Rect();
                dialog. getWindow().getDecorView().getHitRect(dialogBounds);
                if (!dialogBounds.contains((int) ev.getX(), (int) ev.getY())) {
                    // You have clicked the grey area
                    UiUtils.hideKeyboard2(getActivity());
                    return false; // stop activity closing
                }
            }
            getActivity().dispatchTouchEvent(ev);
            return false;
        }
    });

试试这个。当你点击外部时,可以隐藏键盘。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接