Android Dialog点击返回键实现不同效果

在开发过程中我们经常需要各种对话框,使用最多的应该就是Dialog;面对不同的需求,可能需要不同的效果。

1,点击返回键,不关闭Dialog

// 默认为 true,为 false 时表示不可取消
mDialog.setCancelable(false);

2,点击返回键,关闭Dialog,并且关闭Activity

当我们点击返回键,需要将整个Activity和Dialog一块关闭时。我们首先想到的就是通过onKeyDown()方法,重写Activity的返回键事件;但结果并不愉快,好像没有达到我们想要的效果。

原来是Dialog抢走了Activity的焦点,Activity不再是当前的焦点,所以无法获取back键事件,因此我们需要重写Dialog的返回键事件:

// 监听 Dialog 的 Key 事件 
mDialog.setOnKeyListener(new DialogInterface.OnKeyListener() {
            @Override
            public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
                if (keyCode == KeyEvent.KEYCODE_BACK) {
                    // 关闭 Dialog
                    dialog.dismiss();
                    // 关闭当前 Activity
                    finish();
                    // 返回 true,表示返回事件已被处理,不再向下传递
                    return true;
                } else {
                    return false;
                }
            }
        });

后来又看到另外一种方法,好像更加方便:

// 监听 Cancel 事件
mDialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
            @Override
            public void onCancel(DialogInterface dialog) {
                // 关闭 Dialog
                dialog.dismiss();
                // 关闭当前 Activity
                finish();
            }
        });

注意:在设置setCancelable(false)时,setOnCancelListener()无效。

3,点击空白区域不关闭Dialog

这个虽说与返回键无关,但使用场景还是很多的,实现也很简单:

// 点击空白区域不关闭 Dialog(默认为 true)
mDialog.setCanceledOnTouchOutside(false);

你可能感兴趣的:(Android Dialog点击返回键实现不同效果)