Cpt. Охлунд дал мне правильный намек.Теперь я решил это частично с помощью 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()
в третьей строке необходимы, потому что пользователь мог выбрать текст в обратном направлении и, таким образом, start будет иметь более высокое значение, чем end, что не допускается для Editable.replace()
.