【发布时间】:2013-06-16 09:55:03
【问题描述】:
我正在实现 KeyEventDispatcher.dispatchKeyEvent() 以将所有键盘操作传递给外部 (Android) 设备。使用设备轻松将 KeyEvent 转换为提供的协议的一个关键问题是将事件分为两种类型: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 生成事件分开,以避免向设备发送重复的事件(即,如果这些已作为KEY_TYPED 的一部分处理,则不要发送VK_ALT、VK_ENTER 等事件),并且,
switch 非KEY_TYPED 事件在已知动作事件列表上,以便将其转换为适合设备协议的代码。
我可以实现其中任何一个吗?怎么样?
【问题讨论】:
标签: java android event-handling keyboard-events keyevent