Android输入法"输入"按钮问题

时间:2017-02-17 21:29:25

标签: android enter ime

我创建了一个自定义输入法,只是键盘不是一个带有editText的完整IME,但出于某种原因我的"输入"按钮不像内置键盘那样表现。在某些应用程序上,例如Facebook应用程序,有一个"登录"按钮或"密码后的一些类似按钮"领域。当我使用内置键盘并输入密码并按下"输入"按钮它开始登录过程,但我的键盘不这样做。我尝试使用以下方式以不同方式发送关键事件:

ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN,                         KeyEvent.KEYCODE_ENTER));

sendDownUpKeyEvents(KeyEvent.KEYCODE_ENTER);

但似乎都没有相同的效果。只是为了清楚;这两段代码都满足其他"输入"诸如将文本提交到textfied或开始新行等功能。有人可以告诉我这里缺少什么吗?

2 个答案:

答案 0 :(得分:0)

尝试sendDefaultEditorAction(true)方法。就我在AndroidTV上的情况而言,此代码可以正常运行:

class MyInputMethodService : InputMethodService() {
    
    override fun onKeyDown(keyCode: Int, event: KeyEvent?): Boolean {
        if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
            sendDefaultEditorAction(true)
            return true
        }
        return super.onKeyDown(keyCode, event)
    }

}

答案 1 :(得分:0)

参考下面的例子在'换行'时触发 KeyEvent.KEYCODE_ENTER https://cs.android.com/android/platform/superproject/+/master:development/samples/SoftKeyboard/src/com/example/android/softkeyboard/SoftKeyboard.java;l=521;drc=master

private void keyDownUp(int keyEventCode) {
    getCurrentInputConnection().sendKeyEvent(
            new KeyEvent(KeyEvent.ACTION_DOWN, keyEventCode));
    getCurrentInputConnection().sendKeyEvent(
            new KeyEvent(KeyEvent.ACTION_UP, keyEventCode));
}

private void sendKey(int keyCode) {
    switch (keyCode) {
        case '\n':
            keyDownUp(KeyEvent.KEYCODE_ENTER);
            break;
        default:
            if (keyCode >= '0' && keyCode <= '9') {
                keyDownUp(keyCode - '0' + KeyEvent.KEYCODE_0);
            } else {
                getCurrentInputConnection().commitText(String.valueOf((char) keyCode), 1);
            }
            break;
    }
}