0

看起来很傻,但我无法从从 onKeyListener 访问的 KeyEvent 中获取元状态。尝试使用我拥有的所有键盘和模拟器。

无论是否按下 Shift、Ctrl 等键,keyEvent.getMetaState() 都会返回 0。可能它适用于 TextListener,但我不需要它来输入文本,我只想区分 Tab 和 Shift+Tab。

感谢您的预期帮助。

更新。我刚刚发现的是元状态是针对字母键报告的,而不是针对其他键的。

例如,如果我按下左 Shift+T,系统会为 KEYCODE_SHIFT_LEFT 和 KEYCODE_T 生成 KeyEvent,而 KEYCODE_T 的 KeyEvent 设置了 META_SHIFT_ON。您可以使用 Shift+TAB+T 欺骗系统,在这种情况下,为 KEYCODE_T 和 KEYCODE_TAB 设置 META_SHIFT_ON。但是,使用 Shift+TAB 不会生成 KEYCODE_SHIFT_LEFT 的 KeyEvent,并且元状态不受影响。

也许需要更新系统键盘配置文件以允许像 Shift+TAB 这样的组合?

4

1 回答 1

0

是的,这真的是关于 android 配置文件。

修改 /system/usr/kychars/Generic.kcm 中的 TAB 条目(或相应供应商的文件)并添加一行用于移位,如下所示:

key TAB {
    label:                              '\t'
    base:                               '\t'
    shift:                              '\t'
    ctrl, alt, meta:                    none
}

一些设备使用 qwerty.kcm,它已经存在换档线。他们应该可以正常工作而不会受到干扰。顺便说一句,unicode 为 Shift+TAB 提供了一个特殊的代码 \u21B9,但它可能无法被 Android 识别。

于 2013-07-31T02:35:52.407 回答