在Android键盘上完成键

jel*_*c98 3 android enter ime android-softkeyboard

我在完成/输入/下一个键时遇到问题.我正在制作android软键盘,每当我尝试搜索我无法做到的事情时,因为当我按DONE键时光标移动到下一行.这是我的代码:

XML

<Key android:keyLabel="DONE" android:keyWidth="11.11%" android:codes="-1"/>
Run Code Online (Sandbox Code Playgroud)

JAVA

@Override
public void onKey(int primaryCode, int[] keyCodes) {
    InputConnection ic = getCurrentInputConnection();
    switch(primaryCode){
        case -1:
            ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));
            break;
        default:
            char code = (char)primaryCode;
            if(Character.isLetter(code) && caps){
                code = Character.toUpperCase(code);
            }
            ic.commitText(String.valueOf(code), 1);
    }
}
Run Code Online (Sandbox Code Playgroud)

示例:如果我在Google上搜索某些内容并输入我想要的内容,当我单击"完成"键时,我希望它开始搜索.你能帮帮我吗?提前致谢.

Jos*_*lva 12

代替

ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));
Run Code Online (Sandbox Code Playgroud)

尝试

ic.performEditorAction(EditorInfo.IME_ACTION_GO);
Run Code Online (Sandbox Code Playgroud)

执行的操作应该是在EditorInfo上定义的操作,它将在方法onStartInputView上传递给您

要在操作之间切换,请使用:

(sEditorInfo.imeOptions & (EditorInfo.IME_MASK_ACTION|EditorInfo.IME_FLAG_NO_ENTER_ACTION))
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

码:

case -1:

    switch (sEditorInfo.imeOptions & (EditorInfo.IME_MASK_ACTION|EditorInfo.IME_FLAG_NO_ENTER_ACTION)) {
        case EditorInfo.IME_ACTION_GO:
            ic.performEditorAction(EditorInfo.IME_ACTION_GO);
            break;
        case EditorInfo.IME_ACTION_NEXT:
            ic.performEditorAction(EditorInfo.IME_ACTION_NEXT);
            break;
        case EditorInfo.IME_ACTION_SEARCH:
            ic.performEditorAction(EditorInfo.IME_ACTION_SEARCH);
            break;
        case EditorInfo.IME_ACTION_SEND:
            ic.performEditorAction(EditorInfo.IME_ACTION_SEND);
            break;
        default:
            ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));
            break;
    }

    break;
Run Code Online (Sandbox Code Playgroud)