studio - personalizar edittext android
Android: inserta texto en EditText en la posiciĆ³n actual (4)
Quiero insertar una cadena constante en EditText con solo presionar un botón. La cadena debe insertarse en la posición actual en EditText. Si uso EditText.append
el texto se inserta al final de EditText.
¿Cómo puedo hacer eso? No pude encontrar un método adecuado.
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. Math.max()
es necesario en la primera y segunda línea porque, si no hay selección o cursor en EditText, getSelectionStart()
y getSelectionEnd()
devolverán -1. Math.min()
y Math.max()
en la tercera línea es necesario porque el usuario podría haber seleccionado el texto hacia atrás y, por lo tanto, iniciar tendría un valor superior al final, lo que no está permitido para Editable.replace()
.
Creo que esta función te ayudará:
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());
}
Esto parece más simple:
yourEditText.getText().insert(yourEditText.getSelectionStart(), "fizzbuzz");
Sin embargo, la respuesta de Manuel podría ser mejor si desea reemplazar cualquier texto seleccionado con el texto insertado.
Intenta usar EditText.getSelectionStart()
para obtener la posición actual del cursor. Luego puede usar String.subString para obtener el texto antes y después del cursor e insertar su texto en el medio.