Android 安卓应用程序中不总是调用onKeyDown
我已经基于月球着陆器样本创建了一个简单的android游戏,我在处理关键事件方面遇到了问题。当活动开始时,唯一调用onKeyDown或onkeydup的键是dpad up/down/left/right键。菜单键、后退键或dpad_中间键都不会触发onKey方法。但是,一旦我按下了dpad上/下/左/右按钮之一,按下menu、back或dpad_center键就会触发这些方法。我没有发现任何错误,也没有任何迹象表明出了什么问题 焦点可能设置错误-活动是从屏幕上的按钮启动的,因此可能处于触摸屏模式。如果是这样的话,触摸后退按钮不应该让我进入正确的聚焦模式,这样我就可以捕捉到事件了吗 我正在使用SDK-1.5r3中的模拟器。我还没能在真正的手机上尝试这个。这是我的钥匙Android 安卓应用程序中不总是调用onKeyDown,android,user-interface,events,Android,User Interface,Events,我已经基于月球着陆器样本创建了一个简单的android游戏,我在处理关键事件方面遇到了问题。当活动开始时,唯一调用onKeyDown或onkeydup的键是dpad up/down/left/right键。菜单键、后退键或dpad_中间键都不会触发onKey方法。但是,一旦我按下了dpad上/下/左/右按钮之一,按下menu、back或dpad_center键就会触发这些方法。我没有发现任何错误,也没有任何迹象表明出了什么问题 焦点可能设置错误-活动是从屏幕上的按钮启动的,因此可能处于触摸屏模式
public boolean onKeyDown(int keyCode, KeyEvent msg)
{
Log.d(TAG, "onKeyDown: " + keyCode);
return super.onKeyDown(keyCode, msg);
}
谢谢
Matt这是在视图中还是在活动中 如果在一个视图中调用setContentView,并且该视图调用了setFocusable(true),则所有关键事件都将绕过该活动并直接进入该视图 另一方面,如果onKeyDown在视图中,并且您没有在活动上调用setContentView,也没有在视图上调用setFocusable(true),那么您的活动将获得关键事件,而不是视图
寻找那些特定的调用,但我认为你认为这是一个焦点问题是对的。活动的onKeyDown/onkeydup方法并不总是被调用。与之不同的是,dispatchKeyEvent on活动始终被激发。在此处移动键向下/键向上逻辑。效果很好
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
// keydown logic
return true;
}
return false;
}
它在视图中-但在查看时,我意识到我没有启用setFocusableInTouchMode-在中添加它修复了问题。啊,酷。很抱歉,我错过了实际问题,但我很高兴我能提供帮助。我在一个片段中尝试了这一点,但我的视图的onKeyDown()从未被调用,即使我已将其焦点设置为true:
searchView.setFocusable(true);searchView.setFocusableInTouchMode(true)代码>。但活动的onKeyDown()确实会被调用,但遗憾的是,back键不是。我认为back按钮在方法“onBackPressed”中得到了额外的处理,onKeyDown
可能不会被调用来响应KeyEvent。KEYCODE\u菜单
是如果你有一个工具栏-dispatchKeyEvent
的基类实现可能决定工具栏处理了该事件,由于ToolbarActionBar.onMenuKeyEvent
始终返回true
。谢谢您的帖子。非常有用:)不要返回false
,而是调用super并在最后返回结果。对于运行安卓5.1.1的三星SM-J120F不起作用。