Android上的屏幕键盘无法为第二语言发送正确的密钥代码

时间:2014-04-22 09:06:48

标签: android keyboard on-screen-keyboard

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

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

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

KeyEvent文档说:

  

由于软输入法可以使用多种创造性的输入方式   文字,无法保证软键盘上的任何按键都会   生成一个关键事件:这由IME自行决定,并且在   不鼓励发送此类事件的事实。你永远不应该依赖   接收软输入法上任何键的KeyEvents。特别是,   默认软件键盘永远不会向任何键事件发送任何键事件   应用程序目标是Jelly Bean或更高版本,并且只会发送事件   对于一些按下删除键和返回键到应用程序   目标冰淇淋三明治或更早。

答案 1 :(得分:0)

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