#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() 😉