无法从Android KeyEvent获取元状态

时间:2013-07-30 23:24:55

标签: android keyboard-events

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

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

感谢您提供的预期帮助。

更新。我刚才想到的是,按字母键报告元状态,但不报告其他键。

例如,如果我按左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等组合吗?

1 个答案:

答案 0 :(得分:0)

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

您可以在/system/usr/kychars/Generic.kcm(或相应供应商的文件)中修改TAB条目,并为shift添加一行,如下所示:

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

有些设备使用的是qwerty.kcm,它已经存在换档线。他们应该没有入侵就能正常工作。 BTW,unicode为Shift + TAB提供了一个特殊代码\ u21B9,但它可能无法被Android识别。