Seleccione todo el texto dentro de EditText cuando se enfoca

230

Tengo un EditText con algo de texto ficticio. Cuando el usuario hace clic en él, quiero que se seleccione para que cuando el usuario comience a escribir se elimine el texto ficticio.

¿Cómo puedo conseguir esto?

Galip
fuente

Respuestas:

517

Puedes probar en tu main.xmlarchivo:

android:selectAllOnFocus="true"

O, en Java, use

editText.setSelectAllOnFocus(true);
La seda de algodón
fuente
17
Acabo de enterarme de que esto no funciona, si en el XML EditText hay una etiqueta </requestFocus> insertada por el generador de UI.
machtnix
@machtnix Agregue enfoque a otro componente: stackoverflow.com/a/1662088/1020871
Amor
160
editText.setSelectAllOnFocus(true);

Esto funciona si quieres hacerlo programáticamente.

creftos
fuente
2
También para mí ... la solución anterior de alguna manera no funcionó ... la programada funcionó
Martin Christmann
3
Para aquellos que todavía tienen problemas con la respuesta aceptada anteriormente: intente con esta. Confirmado para trabajar (también probado para Fragments).
MrHadiSatrio
Por alguna extraña razón, la forma xml no funcionó correctamente y esta sí. Parece un error dentro del SDK.
ar-g
Y si usted se está centrando programación ( editText.requestFocus()tema editText.clearFocus()de antemano para asegurar una acción deseada se produce en el caso en que la vista está ya centrada
mal perdedor
33
EditText dummy = ... 

// android.view.View.OnFocusChangeListener
dummy.setOnFocusChangeListener(new OnFocusChangeListener(){
    public void onFocusChange(View v, boolean hasFocus){
        if (hasFocus) && (isDummyText())
            ((EditText)v).selectAll();
    }
});
X y Y
fuente
Gracias por su ayuda, pero prefiero la solución de TheCottonSilk porque tengo 12 EditText y me gusta mantener mi código lo más limpio posible :) ¡Gracias de todos modos!
Galip
La solución de @ TheCottonSilk es la mejor para los widgets de tiempo de diseño y la respuesta de Craftos es la mejor para editTexts dinámicos.
Bishnu Paudel
2
@Galip OnFocusChangeListener listener = new OnFocusChangeListener... etc ... editText1.setOnFocusChangeListener(listener) editText2.setOnFocusChangeListener(listener)y así sucesivamente ...
SparK
25

Sé que ha encontrado una solución, pero realmente la forma correcta de hacer lo que está pidiendo es usar el android:hintatributo en su EditText. Este texto aparece cuando el cuadro está vacío y no está enfocado, pero desaparece al seleccionar el cuadro Editar texto.

Kevin Coppock
fuente
44
En mi aplicación, esos campos se completan con datos personales que se pueden guardar. Cuando cargue esos detalles, reemplazará el texto 'ficticio'. Con mi método actual también puedo seleccionar texto DESPUÉS de que el usuario ingrese los detalles. ¡Gracias por tus preocupaciones!
Galip
12

Lo gestioné llamando al foco y seleccionando el programa

{
editabletext.requestFocus();
editabletext.selectAll();
}
AMD
fuente
11

¿Por qué no pruebas android: hint = "hint" para proporcionar la pista al usuario .. !!

La "pista" desaparecerá automáticamente cuando el usuario haga clic en el cuadro de texto de edición. Es la solución adecuada y mejor.

Vaibhav Vajani
fuente
44
Buena respuesta. Sin embargo puede haber situaciones que pueblan el EditarTexto con valores leídos de configuración, etc. y que desea que sea lo más fácil posible para cambiar estos valores :)
nuala
5

También puede agregar un Método OnClick al editText después

_editText.setSelectAllOnFocus(true);

y en eso:

_editText.clearFocus();
_editText.requestFocus();

Tan pronto como haga clic en editText, se seleccionará todo el texto.

usuario4596287
fuente
4

SelectAllOnFocus funciona la primera vez que EditText obtiene el foco, pero si desea seleccionar el texto cada vez que el usuario hace clic en él, debe llamar editText.clearFocus()entre horas.

Por ejemplo, si su aplicación tiene un EditText y un botón, hacer clic en el botón después de cambiar EditText deja el foco en EditText. Luego, el usuario tiene que usar el controlador del cursor y la tecla de retroceso para eliminar lo que está en EditText antes de poder ingresar un nuevo valor. Entonces llame editText.clearFocus()al onClickmétodo del botón .

Noumenon
fuente
2

Intenté una respuesta anterior y no funcionó hasta que cambié las declaraciones. Esto es lo que funcionó para mí:

    myEditText.setSelectAllOnFocus(true);
    myEditText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            onClickMyEditText();
        }
    });

   private void onClickMyEditText() {
       if(myEditText.isFocused()){
        myEditText.clearFocus();
        myEditText.requestFocus();
       }else{
           myEditText.requestFocus();
           myEditText.clearFocus();
       }
   }

Tuve que preguntar si el foco está en EditText y, si no, solicitar el foco primero y luego borrarlo. De lo contrario, las siguientes veces que haga clic en EditText, el teclado virtual nunca aparecerá

Destripador Jugo
fuente
1

Simplemente agregue esto a su editText en el archivo .xml

android: selectAllOnFocus = "true"

Julio Cesar Reis
fuente
0

Esto funciona para mí:

myEditText.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            if(myEditText.isFocused()){
                myEditText.requestFocus();
                myEditText.clearFocus();
                myEditText.setSelection(myEditText.getText().length(), 0);
            }else{
                myEditText.requestFocus();
                myEditText.clearFocus();
            }

        }
    });
senior_russia
fuente