Cpt.Ohlund me dio la pista correcta. Lo resolví, ahora, en parte con el uso de EditText.getSelectionStart()
, pero me di cuenta de que también puedes reemplazar el texto seleccionado con la misma expresión y no necesitas String.subString()
para eso.
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());
Esto funciona para ambos, insertando un texto en la posición actual y reemplazando cualquier texto seleccionado por el usuario. El Math.max()
es necesario en la primera y segunda línea porque, si no hay selección o cursor en EditText, getSelectionStart()
y getSelectionEnd()
ambos devolverán -1. El Math.min()
y el Math.max()
en la tercera línea es necesario porque el usuario podría haber seleccionado el texto al revés y, por lo tanto, comenzar tendría un valor superior al final que no está permitido para Editable.replace()
.
obras como el encanto –