Deshabilitar el enfoque automático al editar texto

6 minutos de lectura

avatar de usuario
saad

Tengo un texto de edición:

   <LinearLayout android:id="@+id/linearLayout7" android:layout_width="match_parent" android:layout_height="wrap_content">
        <EditText android:layout_height="wrap_content" android:layout_width="wrap_content" android:layout_weight="1" android:id="@+id/editText1" android:text="3">
            <requestFocus></requestFocus>
        </EditText>
        <Button android:text="Button" android:layout_height="wrap_content" android:layout_width="wrap_content" android:id="@+id/button2"></Button>
    </LinearLayout>

y luego algunas otras cosas debajo

El problema que tengo es que justo cuando se inicia la aplicación, el foco está en la entrada, no quiero que el foco esté en la entrada justo cuando se inicia la aplicación.

Intenté quitar el

<requestFocus></requestFocus>

cosa y no hizo nada.

  • Establecer android:focusable=”falso”. No se centrará en su EditText

    – Nishant Shah

    29 de septiembre de 2011 a las 7:33

  • eso hará que no se pueda fausar para siempre? ahora, incluso si hago clic en el campo de texto, no se enfocará. Quiero enfocar cuando se hace clic, pero no automáticamente cuando se inicia la aplicación

    – Saad

    29 de septiembre de 2011 a las 7:41

  • primero puede comenzar con obtener la identificación del botón y establecer el enfoque en el botón en su código …

    – Hanry

    29 de septiembre de 2011 a las 7:42

  • Hice esto: a_button = (Button) findViewById(R.id.a_button); a_button.requestFocus(); justo al comienzo del código, pero no hizo nada. ¿Puedo establecer el enfoque a través de xml?

    – Saad

    29 de septiembre de 2011 a las 8:04

  • agregando android:focusableInTouchMode="true" en mi diseño principal funciona para mi.

    – Marcelo Gracietti

    12 mayo 2017 a las 15:05


avatar de usuario
Mudassir

Añade el android:focusable="true" y android:focusableInTouchMode="true" elementos en el diseño principal de Editar texto de la siguiente manera;

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/linearLayout7" android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:focusable="true" android:focusableInTouchMode="true">

Creo que debería ayudarte.

Ver también;
Guía oficial para desarrolladores de Android sobre el manejo del tacto y la entrada

  • @Saad: Funciona. Lo he probado antes de publicarlo aquí. Mantenga el elemento en la parte superior del archivo XML. Por cierto, ¿para qué nivel de API (o versión de Android) está desarrollando?

    – Mudassir

    30 de septiembre de 2011 a las 3:42

  • bien. ¿Puede explicar para qué se usa android:focusable y android:focusableInTouchMode (me refiero a la diferencia y el uso).

    – Anoop

    14 de enero de 2015 a las 7:25

  • Agregue esto al padre también, si no funcionó: android:descendantFocusability="beforeDescendants"

    – A. Rager

    1 de noviembre de 2016 a las 18:02


  • Funciona, pero cuando hago clic en el texto de edición, ¡el teclado no aparece!

    – ensueño_ss

    11 de agosto de 2018 a las 14:09

  • @reverie_ss tienes razón, también estoy experimentando el mismo problema.

    – Ahesanali Suthar

    26 de julio de 2020 a las 10:29

Si desea borrar el enfoque predeterminado en el texto de edición, use los siguientes 2 atributos

android:focusable="false"
 android:focusableInTouchMode="true"

dentro del diseño lineal principal.

por ejemplo:

<LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:focusable="false"
            android:focusableInTouchMode="true"
            android:orientation="vertical">


     <EditText
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
         android:hint="email id"
         android:inputType="textEmailAddress"
         android:maxLines="1"
    />

</LinearLayout>

Si desea ocultar el teclado en la creación de actividad, use estos atributos dentro de la etiqueta de actividad del archivo de manifiesto, por ejemplo:

 <activity
     android:configChanges="screenSize|orientation|keyboardHidden"
     android:screenOrientation="portrait"
     android:name=".activities.LoginActivity"
     android:windowSoftInputMode="stateHidden|adjustResize"/>

Si desea ocultar el teclado al hacer clic en el botón o en algún evento, use el siguiente código

 public void onClick(View v) {
                try {
                    //InputMethodManager is used to hide the virtual keyboard from the user after finishing the user input
                    InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                    if (imm.isAcceptingText()) {
                        imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
                    }
                } catch (NullPointerException e) {
                    Log.e("Exception", e.getMessage() + ">>");
                }
                    }
                } catch (NullPointerException e) {
                    Log.e("Exception", e.getMessage() + ">>");
                }

Si desea quitar el foco de los campos de texto de edición después de salir de la actividad

@Override
    protected void onResume() {
        super.onResume();
        mEmail.clearFocus();
        mPassword.clearFocus();
}

Y finalmente, si desea borrar los datos en los campos de texto de edición al enviar el formulario, use

 @Override
    protected void onResume() {
        super.onResume();
        mEmail.getText().clear();
        mPassword.getText().clear();
    }

NO Más trabajo… simplemente agregue android:windowSoftInputMode=”stateAlwaysHidden” a la etiqueta de actividad del archivo Manifest.xml.

  • Explique qué hace esto y cómo puede ayudar al OP. Las sugerencias sin explicación no ayudan mucho, incluso si la solución podría funcionar.

    – SuperBiasedMan

    10 de agosto de 2016 a las 14:28

  • Consulte esto.. el enlace de arriba.. .

    – Nishanth S. Babu

    12 de agosto de 2016 a las 11:25

  • Eso ocultará el teclado, pero EditText aún mantiene el foco, si no recuerdo mal.

    – A. Rager

    1 de noviembre de 2016 a las 18:00

  • ¡API 27 todos los métodos mencionados no FUNCIONAN!

    – Yaroslav Ducal

    11/06/2019 a las 10:00

avatar de usuario
manish singh

Puede usar el modo de entrada suave de la ventana oculto para ocultar el teclado y android:focusable="false" y android:focusableInTouchMode="true"

<activity
    android:name=".MainActivity"
    android:windowSoftInputMode="stateHidden"
    android:label="@string/app_name"
    >

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

avatar de usuario
Azad Qaderzadeh

prueba este código en LinearLayout

 <LinearLayout
        android:focusable="true"
        android:focusableInTouchMode="true"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <EditText

            android:hint="Search..."
            android:drawableRight="@drawable/ic_search"
            android:id="@+id/search_tab_hotbird_F"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

        <android.support.v7.widget.RecyclerView
            android:id="@+id/recyHotbird_F"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:padding="4dp">

        </android.support.v7.widget.RecyclerView>

    </LinearLayout>

avatar de usuario
Rayo Tarit

Funcionó para mí, deseo que también te ayude.

O :

android:windowSoftInputMode="stateAlwaysHidden"

agregue esta propiedad a su archivo Manifest.xml en esa actividad específica en la que desea deshabilitar el enfoque automático.
Contras: Solo ocultará su teclado virtual, el cursor seguirá allí.

Más :

 android:focusableInTouchMode="true"

agregue esta propiedad a su archivo UI xml (bajo el diseño principal), de modo que oculte el foco también en el teclado.

avatar de usuario
Jack Xu

<EditText
        android:id="@+id/input"
        android:layout_width="0dp"
        android:layout_height="48dp"
        android:focusable="false"
        android:focusableInTouchMode="false" />

detailInputView = (EditText) debugToolsView.findViewById(R.id.input);
    detailInputView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            detailInputView.setFocusable(true);
            detailInputView.setFocusableInTouchMode(true);
            return false;
        }
    });

  • Pero esto tampoco ayudó a enfocarse en el campo de edición de texto, solo cambió la forma en que se cargan los elementos en el dispositivo, aunque funciona

    – LGS

    26 de noviembre de 2017 a las 11:30

¿Ha sido útil esta solución?