【问题标题】:Long pressing menu button closes dialog on Android 2.3长按菜单按钮关闭 Android 2.3 上的对话框
【发布时间】:2013-06-26 14:10:43
【问题描述】:

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

在运行 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 搜索。

【问题讨论】:

  • 这只是关闭对话框还是您的应用程序因按菜单按钮而崩溃?
  • 只是关闭对话框
  • 为了捕捉菜单按钮的长按检查this out。我尝试使用 2.3.6 设备,它似乎可以正常工作。
  • 捕获长按不是问题,因为此时对话框已经消失。如何防止关闭对话框?

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


【解决方案1】:

@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 在不同的供应商上,它可能有不同的键事件尝试通过调试捕获它们,然后在您的代码中处理它们。 A 已将代码添加到 ansver。
  • 我遇到了同样的问题,你的三星 Galaxy Y android 2.3.6 操作系统代码解决了。
猜你喜欢
  • 1970-01-01
  • 2014-05-04
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 1970-01-01
  • 2014-02-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多