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

问题描述:

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

这个问题在Android 4.x上运行的设备上不会发生。我在运行Android 4.1.2的三星Galaxy S3上测试了它,甚至使用Android 4.0.3 Custom 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); 

任何人都知道为什么这是关闭对话框?

编辑

虽然是在“桌面”的长按菜单按钮启动谷歌搜索。

+0

这是仅关闭对话框或没有按菜单按钮,您的应用程序崩溃? – Opiatefuchs

+0

只是关闭对话框 –

+0

用于捕获长按菜单按钮检查[this](http://*.com/questions/5222181/can-you-intercept-the-long-press-on-menu)。我试着用2.3.6设备,它似乎工作。 – anudroid

@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 
} 
+0

@DanielVermaasen在不同的供应商可能有不同的键事件尝试通过调试捕捉它们,然后在你的代码中处理它们。 A有添加代码来解答。 – Lemberg

+0

这样做,非常感谢!这是KeyEvent.KEYCODE_MENU。 –

+0

我面临同样的问题,并通过您的代码解决三星Galaxy Y的Android 2.3.6操作系统。 – Herry