El *_*ino 5 android android-softkeyboard
我有一个为我处理输入的视图,我弹出一个键盘并将视图设置为可聚焦。现在我可以得到某些按键...
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_DEL) {
} else if (keyCode == KeyEvent.KEYCODE_BACK) {
} else if (keyCode == KeyEvent.KEYCODE_ENTER) {
} else {
}
}
Run Code Online (Sandbox Code Playgroud)
等等......我通过使用得到的角色
event.getDisplayLabel()
Run Code Online (Sandbox Code Playgroud)
只要我只想要普通的字母 AZ,就可以工作。在其他语言中,通过长按软键盘上的普通字母可以访问更多字母……但是,onKeyDown/Up 无法检测到这些替代字母。我只能检测正常的字母,软键盘的标签。现在我的应用程序必须处理外国输入和字母,我已将键盘更改为土耳其语,我可以在键盘上找到 í ì ú ù 之类的字母,但是如果我按下它们,则没有任何反应。不是 event.getDisplayLabel 也不是 event.getUnicodeChar(); 我如何检测这些字母?
编辑:
我不确定是什么导致 onKeyDown 根本不被调用。或许是你的观点有问题?因此,可能有比我的解决方案更好的答案。不管怎样,这可能会起作用:
不要使用视图中的 onKeyDown,而是在活动级别重写dispatchKeyEvent。这将在您的按键事件到达窗口管理器之前对其进行处理,因此请确保对您未显式处理的任何按键事件调用 super 。
使用 ACTION_DOWN 的示例(因为每个事件都有 ACTION_UP 和 ACTION_DOWN),因为您的示例使用了 onKeyDown:
@Override
public boolean dispatchKeyEvent(KeyEvent event){
if(event.getAction() == KeyEvent.ACTION_UP) {
return super.dispatchKeyEvent(event);
}
if (keyCode == KeyEvent.KEYCODE_DEL) {
} else if (keyCode == KeyEvent.KEYCODE_BACK) {
} else if (keyCode == KeyEvent.KEYCODE_ENTER) {
} else {
return super.dispatchKeyEvent(event);
}
}
Run Code Online (Sandbox Code Playgroud)
现在(对此感到抱歉)
你可以试试:
char key = (char)event.getUnicodeChar();
Run Code Online (Sandbox Code Playgroud)
代替
char key = event.getDisplayLabel();
Run Code Online (Sandbox Code Playgroud)
getDisplayLabel() 只会为您提供键盘上显示的键,正如您所指出的,该键不一定是用户选择的字符。
| 归档时间: |
|
| 查看次数: |
8368 次 |
| 最近记录: |