Android: Вставить текст в EditText в текущей позиции

Я хочу вставить постоянную строку в EditText нажатием одной кнопки. Строка должна быть вставлена ​​в текущую позицию в EditText. Если я использую EditText.append, текст будет вставлен в конец EditText.

Как я могу это сделать? Я не мог найти подходящий метод.

Ответ 1

Попробуйте использовать EditText.getSelectionStart(), чтобы получить текущую позицию курсора. Затем вы можете использовать String.subString для получения текста до и после курсора и вставки текста в середине.

Ответ 2

Cpt.Ohlund дал мне правильный намек. Я решил это, частично, используя EditText.getSelectionStart(), но я понял, что вы также можете заменить выделенный текст на одно и то же выражение, и вам не нужно String.subString() для этого.

int start = Math.max(myEditText.getSelectionStart(), 0);
int end = Math.max(myEditText.getSelectionEnd(), 0);
myEditText.getText().replace(Math.min(start, end), Math.max(start, end),
        textToInsert, 0, textToInsert.length());

Это работает для обоих, вставляя текст в текущую позицию и заменяя любой текст, выбранный пользователем. Math.max() необходим в первой и второй строках, потому что, если в EditText нет выбора или курсора, getSelectionStart() и getSelectionEnd() будут возвращать -1. Math.min() и Math.max() в третьей строке необходимы, потому что пользователь мог выбрать текст назад и, таким образом, запуск имел бы более высокое значение, чем конец, который не разрешен для Editable.replace().

Ответ 3

Это кажется более простым:

yourEditText.getText().insert(yourEditText.getSelectionStart(), "fizzbuzz");

Однако ответ Мануэля может быть лучше, если вы хотите заменить любой выделенный текст на вставленный текст.

Ответ 4

Я думаю, что эта функция поможет вам:

public void insertConstantStr(String insertStr) {
    String oriContent = editText.getText().toString();
    int index = editText.getSelectionStart() >= 0 ? editText.getSelectionStart() : 0;
    StringBuilder sBuilder = new StringBuilder(oriContent);
    sBuilder.insert(index, insertStr);
    editText.setText(sBuilder.toString());
    editText.setSelection(index + insertStr.length());
}