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 шт):

Автор решения: Barmaley

Мануале по 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);
}
→ Ссылка