Отправка ключевого события после завершения текущего события?

#android #android-edittext #keylistener #keyevent

#Android #android-edittext #keylistener #ключевое событие

Вопрос:

У меня есть OnKeyListener(), живущий в классе, который расширяет EditText, который при нажатии клавиши enter проверяет наличие определенного символа в конце строки и, если он существует, отправляет другое ключевое событие для отправки нажатия табуляции обратно в EditText. Но что происходит, это добавляет вкладку, а затем создает новую строку. Мне нужна вкладка после создания новой строки. Есть ли что-нибудь, что запускается после методов OnKeyListener() / OnKey(), в которые я мог бы поместить свое «событие вкладки»? Или другим способом? Спасибо.

Ответ №1:

Вы можете добавить перевод строки и табуляцию в свой метод OnKey, а затем вернуть true, чтобы указать, что событие было использовано, чтобы предотвратить последующую обработку исходного перевода строки.

 public boolean onKey (final View view, final int i, final KeyEvent keyEvent) {
    Editable editableText = ((EditText)view).getText();

    if (shouldAppendTab(editableText)) {
        editableText.append('n');
        editableText.append('t');
        return true;
    }
    return false;
}
  

Замените shouldAppendTab(editableText) своим кодом, чтобы определить, хотите ли вы добавить вкладку.

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

1. Хорошо, я думаю, это сработает! но я не хочу добавлять в конце edittext, а в курсор (.getSelectionStart()). существует public void append (CharSequence text, int start, int end), но я предполагаю, что start и end находятся в charsequence, а не где в edittext … Нет хорошей документации по этому поводу.

2. В этом случае используйте insert вместо append .

3. я только что выполнил getText().replace(getSelectionStart(), getSelectionEnd(), » n t»); вставка звучит так, как будто это тоже сработает. Спасибо! -редактировать ok, переключаясь на insert, поэтому мне не нужно getSelectionEnd() 😉