KeyEventDispatcher - 如何将操作键事件与Unicode事件分开

时间:2013-06-16 09:55:04

标签: java android event-handling keyboard-events keyevent

我正在实施KeyEventDispatcher.dispatchKeyEvent()将所有键盘操作传递给外部(Android)设备。将KeyEvents轻松转换为随设备提供的协议的一个关键问题是将事件分为两种类型:Unicode事件和“动作事件”(例如,编辑,导航键 - F1,Del,箭头等)。

Java可以非常方便地告诉用户KeyStrokes生成的Unicode字符:您只需检查是否(KeyEvent)e.getID() == KeyEvent.KEY_TYPED,并确保e.getKeyChar()是生成的字符。无需处理修饰键,键保持等。

问题始于其他类型的键输入事件,即不生成KEY_TYPED事件的事件。正如Oracle KeyEvent的文档所述:“不会产生Unicode字符的组合键,例如F1和HELP键等操作键,不会生成KEY_TYPED个事件。”

我需要能够以两种方式处理这些事件:

  • 将它们与KEY_TYPED分开 - 生成事件,以避免向设备发送重复事件(即不发送VK_ALTVK_ENTER等等已作为KEY_TYPED事件的一部分处理过,并且,
  • switchKEY_TYPED事件在已知操作事件列表中,以便将其转换为适合设备协议的代码。

    我可以实现其中任何一种吗?怎么样?

  • 1 个答案:

    答案 0 :(得分:0)

    好的,毕竟这真的很容易。

    如果我之前只知道KeyEvent.isActionKey() ......

    还没有测试所有可能的情况,但它似乎表现得像我预期的那样。