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?

Respuestas:


517

Puedes probar en tu main.xmlarchivo:

android:selectAllOnFocus="true"

O, en Java, use

editText.setSelectAllOnFocus(true);

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.


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();
    }
});

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.


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();
}

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.


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.


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 .


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á


1

Simplemente agregue esto a su editText en el archivo .xml

android: selectAllOnFocus = "true"


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();
            }

        }
    });
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.