1

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

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

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

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

  • 将它们与生成事件分开,以避免向设备发送重复的事件(即,如果这些已作为事件的一部分处理,则KEY_TYPED不要发送等),并且, VK_ALTVK_ENTERKEY_TYPED
  • switch已知动作事件列表中的非KEY_TYPED事件,以便将其转换为适合设备协议的代码。

    我可以实现其中任何一个吗?如何?

  • 4

    1 回答 1

    1

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

    如果我只知道有一个KeyEvent.isActionKey()更早的...

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

    于 2013-06-17T09:48:43.153 回答