keyCode в Google Keyboard не работает, как в других клавиатурах
Вот код, в котором при нажатии Enter должен выполняться переход на новый EditText и сохранять текст в базу данных(не суть важно), проблема в том что в телефонах которые используют Google keyboard keyCode == KeyEvent.KEYCODE_ENTER не работает, хотя Samsung kboard и просто компьютерная клавиатура выполняют нужные действия, помогите как пофиксить. Пишу на kotlin если что, но и Java ответ тоже думаю поможет.
NoteField1.setOnKeyListener(object : View.OnKeyListener {
override fun onKey(v: View?, keyCode: Int, event: KeyEvent): Boolean {
if (event.action == KeyEvent.ACTION_DOWN &&
keyCode == KeyEvent.KEYCODE_ENTER
) {
NoteField2.requestFocus()
saveData()
return true
}
return false
}
})
Ответы (1 шт):
Мануале по onKey() говорится следующее:
Key presses in software keyboards will generally NOT trigger this method, although some may elect to do so in some situations. Do not assume a software input method has to be key-based; even if it is, it may use key presses in a different way than you expect, so there is no way to reliably catch soft input key presses.
То есть, метод для софт-клавиш не всегда срабатывает...
Рекомендую использовать вместо onKey() метод dispatchKeyEvent():
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN &&
event.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
// blah-blah
return true;
}
return super.dispatchKeyEvent(event);
}