长按菜单按钮关闭Android 2.3上的对话框

时间:2013-06-26 14:10:44

标签: android android-layout android-view android-ui

我们创建了一个使用对话框的android库。在使用Android 2.3.6的三星Galaxy S1 Plus I9005上进行测试后,我们经历了长按设备菜单按钮立即关闭活动对话框。我甚至不知道长按该按钮的目的。 对于不懂设备的人,这张图片应该显示我的意思: Samsung Galaxy S1

在Android 4.x上运行的设备上不会出现此问题。我在运行Android 4.1.2的三星Galaxy S3以及带有Android 4.0.3自定义ROM的Galaxy S1上进行了测试 - 没问题。

要取消关闭对话框,我尝试覆盖onKeyDownonKeyUponPrepareOptionsMenu和其他似乎相关的方法,但其中没有带来成功或任何有价值的信息。当我尝试调试这些方法时发生了同样的情况,因为在调试器到达我可以覆盖的任何方法之前对话框已经消失。

使用以下方式创建对话框:

@Override
public Dialog onCreateDialog(final int pId) {
    Dialog dialog;
    switch (pId) {
        case LOADING_DIALOG:
            dialog = DialogCreator.createLoadingDialog(MyActivity.this));
            break;
        default:
            dialog = null;
    }
    super.onCreateDialog(pId);
    return dialog;
}

DialogCreator只是使用:

创建一个AlertDialog
new AlertDialog.Builder(pContext).create();

为了防止取消对话,我添加了:

alertDialog.setCanceledOnTouchOutside(false);
alertDialog.setCancelable(false);

有人知道为什么这会关闭对话框吗?

修改

在“桌面”上,长按菜单按钮会启动Google搜索。

1 个答案:

答案 0 :(得分:3)

@QQQestions的答案帮助我解决了这个问题。您应该使用OnKeyListener拦截菜单按钮长按事件。

修改

if (keyCode == KeyEvent.KEYCODE_SEARCH && event.getRepeatCount() == 0) {
 return true; // Pretend we processed it
} else if (keyCode == KeyEvent.KEYCODE_MENU && event.getRepeatCount() == 0) {
 return true; // Pretend we processed it
}