我创建了一个自定义输入法,只是键盘不是一个带有editText的完整IME,但出于某种原因我的"输入"按钮不像内置键盘那样表现。在某些应用程序上,例如Facebook应用程序,有一个"登录"按钮或"密码后的一些类似按钮"领域。当我使用内置键盘并输入密码并按下"输入"按钮它开始登录过程,但我的键盘不这样做。我尝试使用以下方式以不同方式发送关键事件:
ic.sendKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));
和
sendDownUpKeyEvents(KeyEvent.KEYCODE_ENTER);
但似乎都没有相同的效果。只是为了清楚;这两段代码都满足其他"输入"诸如将文本提交到textfied或开始新行等功能。有人可以告诉我这里缺少什么吗?
答案 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;
}
}