我有NativeActivity的应用程序。
我想显示屏幕键盘并按下按键。当我用英语输入时,一切正常,但当我将键盘切换为俄语时,我只收到键码,转移等的零。
要显示键盘我使用此代码:
InputMethodManager imm = (InputMethodManager) activity.getSystemService( Context.INPUT_METHOD_SERVICE );
View view = activity.getWindow( ).getDecorView( );
imm.showSoftInput( view, 0 );
我在NativeActivity中的onInputEvent函数中接收键盘事件:
int32_t eventType = AInputEvent_getType( event );
if( eventType == AINPUT_EVENT_TYPE_KEY )
{
int32_t keyAction = AKeyEvent_getAction( event );
int32_t keyCode = AKeyEvent_getKeyCode( event );
int32_t repeatCount = AKeyEvent_getRepeatCount( event );
int32_t keyFlags = AKeyEvent_getFlags( event );
int32_t keyScanCode = AKeyEvent_getScanCode( event );
int32_t keyMetaState = AKeyEvent_getMetaState( event );
LOGW( "EventType = AINPUT_EVENT_TYPE_KEY, keyAction = %d, keyCode = %d, repeatCount = %d, keyFlags = %d, keyScan = %d, keyMeta = %d", keyAction, keyCode, repeatCount, keyFlags, keyScanCode, keyMetaState );
}
我将所有事件参数都设为零。
我该如何解决这个问题?
答案 0 :(得分:1)
KeyEvent文档说:
由于软输入法可以使用多种创造性的输入方式 文字,无法保证软键盘上的任何按键都会 生成一个关键事件:这由IME自行决定,并且在 不鼓励发送此类事件的事实。你永远不应该依赖 接收软输入法上任何键的KeyEvents。特别是, 默认软件键盘永远不会向任何键事件发送任何键事件 应用程序目标是Jelly Bean或更高版本,并且只会发送事件 对于一些按下删除键和返回键到应用程序 目标冰淇淋三明治或更早。
答案 1 :(得分:0)
这是答案(关键是覆盖dispatchKeyEvent
):
https://stackoverflow.com/a/43871301/674548