Le Cpt. Ohlund m'a donné le bon indice. Je l'ai résolu, maintenant, en partie avec l'utilisation de EditText.getSelectionStart()
mais j'ai réalisé que l'on peut aussi remplacer le texte sélectionné par la même expression et que l'on n'a pas besoin de String.subString()
pour ça.
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());
Cela fonctionne dans les deux cas, en insérant un texte à la position actuelle et en remplaçant le texte sélectionné par l'utilisateur. Le site Math.max()
est nécessaire dans la première et la deuxième ligne car, s'il n'y a pas de sélection ou de curseur dans l'EditText, getSelectionStart()
y getSelectionEnd()
retourneront tous deux -1. Le site Math.min()
y Math.max()
dans la troisième ligne est nécessaire parce que l'utilisateur aurait pu sélectionner le texte à l'envers et donc le début aurait une valeur plus élevée que la fin, ce qui n'est pas autorisé pour le format Editable.replace()
.