android - onKeyDown 并不总是在 Android 应用程序中调用

标签 android user-interface events

我基于月球着陆器示例创建了一个简单的安卓游戏,但我在处理关键事件时遇到了问题。当 Activity 开始时,唯一需要调用 onKeyDown 或 onKeyUp 的键是方向键上/下/左/右键。 menu、back 或 dpad_center 键都不会触发 onKey 方法。但是,一旦我按下了 dpad 上/下/左/右按钮之一,按下菜单、后退或 dpad_center 键就会触发这些方法。我没有收到任何错误,也没有出现问题的任何迹象。

焦点可能设置错误 - Activity 是从屏幕上的按钮启动的,因此它可能处于触摸屏模式。如果是这样的话,触摸后退按钮不应该让我进入正确的焦点模式以便我可以 catch 事件吗?

我正在使用来自 SDK-1.5r3 的模拟器。我还没能在真手机上试过这个。这是我的 onKeyDown。

public boolean onKeyDown(int keyCode, KeyEvent msg)
{
    Log.d(TAG, "onKeyDown: " + keyCode);
    return super.onKeyDown(keyCode, msg);
}

谢谢

马特

最佳答案

onKeyDown 是在 View 中还是在 Activity 中?

如果调用 setContentView 传递一个 View ,并且该 View 调用了 setFocusable(true),所有关键事件将绕过 Activity 并直接进入 View 。

另一方面,如果您的 onKeyDown 在 View 中,并且您没有在 Activity 上调用 setContentView 和在 View 上调用 setFocusable(true),那么您的 Activity 将获得按键事件而不是 View。

寻找那些特定的电话,但我认为您认为这是一个焦点问题是正确的。

关于android - onKeyDown 并不总是在 Android 应用程序中调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1592559/

相关文章:

java - Android OnTouchListener 干扰 OnClickListener

android - 检索 SQLite 表中的最后一条记录(再次)

c# - 继承 WPF 窗口

c++ - 在 Qt 框架中控制多个 UI 文件

java - 复杂应用程序中的事件处理

java - 从基本服务器向特定客户端发送消息

android - 无法使微调器的滚动条始终可见(Android)

ios - 在启动屏幕中执行代码

css - 一种使用 CSS3 创建 hoverIntent 类型延迟效果的方法?

Android EditText 删除(退格)键事件