Android onKeyDown没有捕获Dpad中心并输入按键

时间:2012-07-20 00:01:02

标签: android events user-interface handler onkeydown

在onKeyDown的基本活动中进行简单的覆盖,我能够捕获除enter和dpad中心按钮之外的所有按键(通过断点确定)。我不知道为什么 - 有人能说清楚情况吗?

编辑:快速更新 - 它会捕获Dpad中心并输入关键的LONG按下,但仍然不能正常按下。

3 个答案:

答案 0 :(得分:7)

我知道这个问题已经很老了,但是如果一些绝望的编码器迷路了,我会发布我的答案。

我的USB键盘遇到了类似的问题。当除了EditText框以外的任何其他内容时,ENTER键从未被onKeyUp或onKeyDown捕获。

如果使用dispatchKeyEvent(),则在它到达窗口之前获取KeyEvent,在我的情况下,我肯定会得到ENTER键。 但要谨慎,该事件被调用两次,一次用于按键,一次用于按键。

这里有一个示例代码:

@Override
public boolean dispatchKeyEvent(KeyEvent event) {

    System.out.println(event.getAction() + " " + event.getKeyCode() + " - " + (char) event.getUnicodeChar());

    return true;
}

答案 1 :(得分:1)

您是否阅读了documentation

软键盘中的按键通常不会触发此侦听器,尽管有些人可能会选择在某些情况下这样做。 不要依赖它来捕获软件按键。

此外,您捕获密钥的方式非常模糊。您甚至没有使用以下方法检查发送给您的keyCode:

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { return false; }

您可以从视图处理onKey:

public boolean onKey(View v, int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_ENTER:
            /* This is a sample for handling the Enter button */
            return true;
    }
    return false;
}

请记住实现OnKeyListener并设置监听器

viewname.setOnKeyListener(this);

答案 2 :(得分:-1)

似乎DPAD键正在为焦点项目起作用,如下所示:

https://groups.google.com/forum/#!topic/android-developers/HsILBlpsK7I

虽然我自己没有尝试过,但也许你可以将焦点设置到你的视图对象并在其上附加一个关键的监听器功能。

更新:我的同事遇到了同样的问题,这个建议对她有用。 :)当列表视图聚焦时,她能够从DPAD中捕获关键代码。