Страницы

Поиск по вопросам

суббота, 11 января 2020 г.

Почему метод onEditorAction не отлавливает нажатие Enter на программной клавиатуре при включенной русской раскладке, но отлавливает его на английской?

#java #android #android_edittext #кириллица


Прочитал на этом сайте и на его английском прародителе много схожих вопросов и ответов,
перепробовал разные условия if, но так и не понял, почему в английской раскладке все
работает так, как я и ожидаю, тогда как в русской - нажатие enter просто переводит
в новую строку (неужели код нажатия клавиши зависит от раскладки?). У EditText задан
атрибут inputType="textMultiLine".    

public boolean onEditorAction(TextView textView, int actionId, KeyEvent event) {

if (event != null) {

if ((event.getKeyCode() == KeyEvent.KEYCODE_ENTER) &&
(event.getAction() == KeyEvent.ACTION_DOWN)) {
            // сохраняем текст, введенный до нажатия Enter в переменную
                currentMessage = editText.getText().toString();
                editText.setText("");
                return true;
        }

    }
    return false;
}


Пробовал менять KeyEvent.ACTION_DOWN на actionId == EditorInfo.IME_ACTION_SEND с
предварительным editText.setImeActionLabel("SEND", EditorInfo.IME_ACTION_SEND);, но
это не помогло.
Заранее благодарю за ответ.
    


Ответы

Ответ 1



Java editText.setOnEditorActionListener(new OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { boolean handled = false; if (actionId == EditorInfo.IME_ACTION_SEND) { currentMessege = editText.getText().toString(); setText(currentMessege); editText.setText(""); handled = true; } return handled; } }); XML Вместо textMultiLine Используйте android:inputType="textImeMultiLine" - проверил лично, работает на все 100% при русской и английской раскладке. Документация P.S. Вкратце, "Enter" на клавиатуре - это imeOptions (Specify the Input Method Action), существуют: IME_ACTION_SEND (картинка письмо) IME_ACTION_DONE (галочка) IME_ACTION_SEARCH (лупа) и т.д в Java нужно обозначать .IME_ACTION_*, в xml android:imeOptions="action*"

Комментариев нет:

Отправить комментарий