2

我有带有 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 );
}

而且我将所有事件参数都设为零。

我该如何解决这个问题?

4

2 回答 2

1

KeyEvent文档说:

由于软输入法可以使用多种创新方式输入文本,因此无法保证软键盘上的任何按键都会产生按键事件:这由 IME 自行决定,实际上不鼓励发送此类事件。您永远不应该依赖接收 KeyEvents 来获取软输入法上的任何键。特别是,默认的软件键盘永远不会向任何针对 Jelly Bean 或更高版本的应用程序发送任何键事件,并且只会向针对 Ice Cream Sandwich 或更早版本的应用程序发送某些按下删除键和返回键的事件。

于 2015-03-16T07:05:52.390 回答
0

这就是答案(关键是要覆盖dispatchKeyEvent): https ://stackoverflow.com/a/43871301/674548

于 2017-07-07T18:31:27.097 回答