我有一个onKeyDown()
被覆盖的自定义视图。当我使用标准的 Android 英语(或意大利语)软键盘时,它工作正常,但是当我将设备设置为俄语时,按键事件永远不会到达onKeyDown()
或onKeyUp()
(它们从未被调用,我尝试使用断点)。
此外,如果所有视图都丢弃了该事件,我应该能够从活动的方法中捕获它,但似乎我什至不能在那里。请注意,视图是集中的,实际上我可以捕捉方向键按下。删除/退格俄语软键也被捕获。
我应该如何捕捉俄罗斯字符的关键事件?
我有一个onKeyDown()
被覆盖的自定义视图。当我使用标准的 Android 英语(或意大利语)软键盘时,它工作正常,但是当我将设备设置为俄语时,按键事件永远不会到达onKeyDown()
或onKeyUp()
(它们从未被调用,我尝试使用断点)。
此外,如果所有视图都丢弃了该事件,我应该能够从活动的方法中捕获它,但似乎我什至不能在那里。请注意,视图是集中的,实际上我可以捕捉方向键按下。删除/退格俄语软键也被捕获。
我应该如何捕捉俄罗斯字符的关键事件?
来自KeyEvent文档:
由于软输入法可以使用多种创新方式输入文本,因此无法保证软键盘上的任何按键都会产生按键事件:这由 IME 自行决定,实际上不鼓励发送此类事件。您永远不应该依赖接收 KeyEvents 来获取软输入法上的任何键。
就您获得KeyEvent
s 而言,这违反了 Google 的建议,并且在未来的所有 android 版本中都不受支持。随着时间的推移,这种方法肯定会在更多设备上得到突破。那么如何捕捉人物呢?一种选择是使用TextWatcher。
这似乎是其他 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 的更多信息,请查看此 Android 开发人员页面,有关 Android 键盘不响应某些语言的更多信息,请查看此错误报告。