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

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

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

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

Cp.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() .

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

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

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

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

 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()); }