【问题标题】:onKeyUp doesn't work for KEYCODE_DPAD_CENTERonKeyUp 不适用于 KEYCODE_DPAD_CENTER
【发布时间】:2012-10-15 11:37:44
【问题描述】:

我有 2 个活动,其中我覆盖了 onKeyUp 事件:

@Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        Log.d(TAG, "Key up: " + keyCode);
        return super.onKeyUp(keyCode, event);
     }

第一个是应用程序的主要活动,另一个是次要的。第一个工作正常,但第二个捕获 Left-Right-Up-Down 的事件,而不是 Center click 的事件。为什么?

【问题讨论】:

  • 难道没有一些视图有焦点并抓住了事件吗?看看 onKeyUp 的文档是怎么说的:当一个键被释放并且没有被活动内部的任何视图处理时调用。因此,例如,光标在 TextView 内时的按键不会触发事件(除非它是到另一个对象的导航),因为 TextView 会处理自己的按键。
  • 我没有手动设置焦点,如何查看?
  • 您不必手动设置它 - 例如,当有一个 EditText 时,它将自动获得焦点。
  • 有 ImageView、Gallery 和另外一个 View。

标签: android d-pad


【解决方案1】:

由于您的布局中有一个图库,请查看:https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/Gallery.java#L1216。图库可能会窃取您的 DPAD_CENTER 事件(以及 ENTER)。

我建议您使用Activity.dispatchKeyEvent(android.view.KeyEvent) 在事件进入该画廊之前停止该事件。

尝试像这样使用它(在您的活动中):

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
  if(event.getKeyCode() == KeyEvent.KEYCODE_DPAD_CENTER) {
    // Do your stuff here.
    return true; // Consume the event (or not, your call)
  }
  return super.dispatchKeyEvent(event);
}

【讨论】:

  • Log.d(TAG, "Dispatch:" + 事件); - 这对 DPAD_CENTER 没有任何显示,但对其他键有效。
  • 好的,那么我建议你粘贴一些布局和活动的代码,这样我们就可以试验实际的实现了。
  • 这对我有帮助。谢谢。
猜你喜欢
  • 2014-08-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-03
  • 1970-01-01
相关资源
最近更新 更多