2013-07-30 55 views
0

看起来很愚蠢,但我无法从KeyEvent获取元状态,从onKeyListener访问。试用了我的所有键盘和模拟器。无法从Android KeyEvent获取元状态

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

感谢您期待的帮助。

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

例如,如果我按下左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?

回答

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提供了一个特殊的代码,但它可能无法被Android识别。