Ответ 1
Попробуйте использовать EditText.getSelectionStart()
, чтобы получить текущую позицию курсора. Затем вы можете использовать String.subString для получения текста до и после курсора и вставки текста в середине.
Я хочу вставить постоянную строку в EditText нажатием одной кнопки. Строка должна быть вставлена в текущую позицию в EditText.
Если я использую EditText.append
, текст будет вставлен в конец EditText.
Как я могу это сделать? Я не мог найти подходящий метод.
Попробуйте использовать EditText.getSelectionStart()
, чтобы получить текущую позицию курсора. Затем вы можете использовать String.subString для получения текста до и после курсора и вставки текста в середине.
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()
.
Это кажется более простым:
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());
}