keyListener не распознает ввод - PullRequest
       30

keyListener не распознает ввод

2 голосов
/ 20 февраля 2020

У меня есть KeyListener на editText, например, так:

tip = (EditText) findViewById(R.id.tip);
tip.setOnKeyListener(new EditText.OnKeyListener(){
    public boolean onKey(View v, int keyCode, KeyEvent event) {

        Log.i("debug123", "onKeyListener. event.getKeyCode(): " + event.getKeyCode());

        // If the event is a key-down event on the "enter" button
        if ((event.getAction() == KeyEvent.ACTION_DOWN) && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
            checkInput();
            return true;
        }
        return false;
    }
});

Но штрих программной клавиатуры не распознается. Только когда я покинул Activity с помощью кнопки BACK (HardwareButton), слушатель распознает действие. Но из всего, что я прочитал, это способ go, если я хочу работать с пользовательским вводом в EditText.

1 Ответ

1 голос
/ 20 февраля 2020

setOnKeyListener

Зарегистрируйте обратный вызов, который будет вызываться при нажатии аппаратной клавиши в этом представлении. Нажатие клавиш в программных методах ввода обычно не вызывает методы этого слушателя.

setOnEditorActionListener

Установить специальный слушатель, который будет вызываться при действие выполняется в текстовом представлении. Он будет вызываться при нажатии клавиши ввода или при выборе пользователем действия , предоставленного в IME.

Для решения вашей проблемы используя setOnEditorActionListener, проверьте ниже:

  • Добавьте imeOptions и inputType к вашему EditText
<EditText
    android:id="@+id/tip"
    android:imeOptions="actionDone"
    android:inputType="text"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>
  • Затем добавьте setOnEditorActionListener to EditText
tip.setOnEditorActionListener(new TextView.OnEditorActionListener() {
    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {

        if ( (actionId == EditorInfo.IME_ACTION_DONE) || (event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) ) {
            checkInput();
            return true;
        } else {
            return false;
        }
    }
});

Здесь

  • actionId == EditorInfo.IME_ACTION_DONE действие ручки из Soft Keyboard (IME)
  • event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN ручка ввода ключ от аппаратной клавиатуры
...