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()
.
работает как шарм –