Pregunta

Quiero insertar una cadena constante en un EditarTexto por la prensa de un botón. La cadena debe ser insertado en la posición actual en el EditarTexto. Si uso EditText.append el texto se inserta al final de la EditarTexto.

¿Cómo puedo hacer eso? No pude encontrar un método adecuado.

¿Fue útil?

Solución

Trate de usar EditText.getSelectionStart() para obtener la posición actual del cursor. A continuación, puede utilizar String.substring para obtener el texto antes y después del cursor e insertar el texto en el centro.

Otros consejos

Cpt.Ohlund me dio el toque justo. Lo resuelto, ahora, en parte, con el uso de EditText.getSelectionStart(), pero me di cuenta que también se puede reemplazar el texto seleccionado con la misma expresión y que no necesito 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 tanto, la inserción de un texto en la posición actual y la sustitución de cualquier texto es seleccionado por el usuario. El Math.max() es necesario en la primera y segunda línea ya que, si no hay selección o cursor en el EditarTexto, getSelectionStart() y getSelectionEnd() voluntad tanto la rentabilidad -1. El Math.min() y Math.max() en la tercera línea es necesario porque el usuario podría haber seleccionado los hacia atrás de texto y por lo tanto comenzar tendría un valor más alto que extremo que no está permitido para Editable.replace().

Esto parece simple:

yourEditText.getText().insert(yourEditText.getSelectionStart(), "fizzbuzz");

Sin embargo, la respuesta de Manuel podría ser mejor si se desea reemplazar cualquier texto seleccionado por el texto insertado.

Creo que esta función le ayudará a usted:

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());
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top