Je veux insérer une chaîne constante dans un EditText en appuyant sur un bouton. La chaîne doit être insérée à la position actuelle dans EditText. Si j'utilise EditText.append
le texte est inséré à la fin du EditText.
Comment puis je faire ça? Je n'ai pas trouvé de méthode appropriée.
Essayez d'utiliser EditText.getSelectionStart()
pour obtenir la position actuelle du curseur. Ensuite, vous pouvez utiliser String.subString pour obtenir le texte avant et après le curseur et insérer votre texte au milieu.
Le Cpt.Ohlund m'a donné le bon indice. Je l'ai résolu, maintenant, en partie en utilisant EditText.getSelectionStart()
, mais j'ai réalisé que vous pouvez également remplacer le texte sélectionné par la même expression et vous n'avez pas besoin de String.subString()
pour cela.
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 pour les deux, en insérant un texte à la position actuelle et en remplaçant le texte sélectionné par l'utilisateur. La Math.max()
est nécessaire sur la première et la deuxième ligne car, s'il n'y a pas de sélection ou de curseur dans EditText, getSelectionStart()
et getSelectionEnd()
renverra tous deux -1. La Math.min()
et Math.max()
dans la troisième ligne est nécessaire car l'utilisateur aurait pu sélectionner le texte à l'envers et donc start aurait une valeur supérieure à end qui n'est pas autorisée pour Editable.replace()
.
Cela semble plus simple:
yourEditText.getText().insert(yourEditText.getSelectionStart(), "fizzbuzz");
Cependant, la réponse de Manuel pourrait être meilleure si vous souhaitez remplacer un texte sélectionné par le texte inséré.
Je pense que cette fonction vous aidera:
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());
}