俄罗斯(西里尔)关键事件未解雇

时间:2013-08-09 17:04:43

标签: android android-custom-view ime cyrillic

我有一个自定义视图,其中onKeyDown()被覆盖。当我使用标准的Android英语(或意大利语)软键盘时它工作正常,但是当我将设备设置为俄语时,键盘事件永远不会到达onKeyDown()onKeyUp()(它们从未被调用,我尝试过断点)。

此外,如果所有视图都放弃了该事件,我应该能够从活动的方法中捕获它,但似乎我甚至不能在那里。请注意,视图是集中的,实际上我可以捕获方向键按下。还删除了删除/退格俄语软键。

我该如何捕捉俄语字符键事件?

2 个答案:

答案 0 :(得分:1)

来自KeyEvent文档:

  

由于软输入法可以使用多种创造性的输入文本方式,因此无法保证软键盘上的任何按键都会产生关键事件:这由IME自行决定,事实上发送此类事件是泄气。您不应该依赖于接收软输入法上任何键的KeyEvent。

如果您 获取KeyEvent s,则会违反Google的建议,并且不会在所有版本的Android中支持。随着时间的推移,这种方法肯定会在更多设备上中断。那么你如何捕捉角色? 一种选择是使用TextWatcher

答案 1 :(得分:0)

这似乎也是其他Android用户所拥有的问题,我找到的解决方案是覆盖dispatchKeyEvent。

@Override
public boolean dispatchKeyEvent(KeyEvent event) {
    Toast.makeText(getApplicationContext(), "Key: " + event.getKeyCode(),
        Toast.LENGTH_LONG).show();

    return super.dispatchKeyEvent(event);
}

使用event.getAction()调用可以告诉你它是onKeyDown,onKeyUp等。有关KeyEvents的更多信息,请查看this Android developers' page,有关Android键盘没有响应某些语言的更多信息,请查看{ {3}}