Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 安卓应用程序中不总是调用onKeyDown_Android_User Interface_Events - Fatal编程技术网

Android 安卓应用程序中不总是调用onKeyDown

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键就会触发这些方法。我没有发现任何错误,也没有任何迹象表明出了什么问题 焦点可能设置错误-活动是从屏幕上的按钮启动的,因此可能处于触摸屏模式

我已经基于月球着陆器样本创建了一个简单的android游戏,我在处理关键事件方面遇到了问题。当活动开始时,唯一调用onKeyDown或onkeydup的键是dpad up/down/left/right键。菜单键、后退键或dpad_中间键都不会触发onKey方法。但是,一旦我按下了dpad上/下/左/右按钮之一,按下menu、back或dpad_center键就会触发这些方法。我没有发现任何错误,也没有任何迹象表明出了什么问题

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

我正在使用SDK-1.5r3中的模拟器。我还没能在真正的手机上尝试这个。这是我的钥匙

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不起作用。