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

3
我们创建了一个与对话框一起工作的Android库。在使用三星Galaxy S1 Plus I9005和Android 2.3.6进行测试后,我们发现长按设备菜单按钮会立即关闭活动对话框。我甚至不知道长按该按钮的目的是什么。 对于不了解该设备的人,这张图片应该能说明问题: Samsung Galaxy S1 这个问题在运行Android 4.x的设备上不会出现。我在运行Android 4.1.2的三星Galaxy S3和安装有Android 4.0.3自定义ROM的Galaxy S1上进行了测试 - 没有问题。
为了防止关闭对话框,我尝试重写onKeyDown、onKeyUp、onPrepareOptionsMenu和其他看起来相关的方法,但是没有一个方法成功或提供任何有价值的信息。当我尝试调试这些方法时,由于对话框在调试器到达任何可重写的方法之前就消失了,所以也出现了同样的情况。
对话框是通过以下方式创建的:
@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);

你有没有想法为什么这会关闭对话框?

编辑

当处于“桌面”时,长按菜单按钮会启动谷歌搜索。


这只是关闭对话框还是您的应用程序在按菜单按钮时崩溃了? - Opiatefuchs
只需关闭对话框。 - Daniel Vermaasen
检查这个来捕获菜单按钮的长按。我已经在一个2.3.6设备上尝试过,似乎可以工作。 - anudroid
捕获长按不是问题,因为对话框在那时已经消失了。如何防止关闭对话框? - Daniel Vermaasen
1个回答

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
}

@DanielVermaasen 在不同的供应商上,它可能有不同的键,尝试通过调试捕获它们,然后在您的代码中处理它们。我已经添加了代码来回答。 - Roman Nazarevych
我遇到了同样的问题,并通过你的代码解决了三星Galaxy Y安卓2.3.6操作系统的问题。 - Herry

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