Evitar que el teclado se muestre al iniciar la actividad

265

Tengo una actividad con una Edit Textentrada. Cuando se inicializa la actividad, se muestra el teclado de Android. ¿Cómo puede permanecer oculto el teclado hasta que el usuario enfoque la entrada?

Fcoder
fuente
93
en su manifiesto<activity android:windowSoftInputMode="stateHidden" ...>
idiottiger
1
posible duplicado de la aparición automática del teclado en pantalla
Caleb
1
¿Cómo usar junto con android:windowSoftInputMode="adjustPan"?
János
44
@János android: windowSoftInputMode = "ajustarPan | stateHidden"
Alexey Strakh
la respuesta en este comentario, fue la respuesta que estoy buscando: stackoverflow.com/a/23605510/6942602
korchix

Respuestas:

436

Creo que lo siguiente puede funcionar

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

Lo he usado para este tipo de cosas antes.

Lucas
fuente
¿Hay alguna manera de configurarlo para que sea un teclado de solo dígitos? es decir, teclado 12Key?
Mohamed Khamis
@MohamedKhamis input.setRawInputType (Configuration.KEYBOARD_12KEY);
blockwala
1
Sí, aún funciona. @SagarNayak ¿por qué querrías ocultar el teclado EditText? :) Esto es para ocultar el teclado cuando comienza la actividad que contieneEditText
Martynas
@Devealte 7 años después y funcionó para mí, ¿lo colocaste en onCreate?
Dymas
@Dymas Sí, y lo arreglé hace varios meses :)
Devealte
180

Prueba esto también -

this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);

De lo contrario, declare en la actividad de su archivo de manifiesto:

<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Main"
          android:label="@string/app_name"
          android:windowSoftInputMode="stateHidden"
          >

Si ya ha estado utilizando android:windowSoftInputModeun valor como adjustResizeo adjustPan, puede combinar dos valores como:

<activity
        ...
        android:windowSoftInputMode="stateHidden|adjustPan"
        ...
        >

Esto ocultará el teclado cuando sea apropiado, pero desplazará la vista de actividad en caso de que deba mostrarse el teclado.

Praveenkumar
fuente
3
gracias por mostrar tanto en código como en xml! De hecho, esta es la respuesta más correcta! Especialmente porque probablemente fueron los 3 minutos que pasaste escribiendo ambos métodos que no te hicieron primero ;-)
eric
34

Escóndelo para todas las actividades que usan el tema

<style name="MyTheme" parent="Theme">
    <item name="android:windowSoftInputMode">stateHidden</item>
</style>

establecer el tema

<application android:theme="@style/MyTheme">
dira
fuente
como este enfoque global.
Rm558
1
Esto funcionó cuando estaba usando diferentes temas en varios lugares
nmxprime
22

Agregue estas dos propiedades a su diseño principal (por ejemplo, diseño lineal, diseño relativo)

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

Hará el truco :)

Rey de las masas
fuente
2
Esto no funciona para mí, sin embargo, configurarlos para que truefuncionen, según la respuesta de Jack T. ¿Hubo un cambio de comportamiento en las versiones recientes?
Protean
Además de mi respuesta, debe verificar también las otras propiedades que tiene en manifiesto y editar texto.
Rey de misas
Solo tengo las propiedades más básicas en ellos. Sin falseembargo, no entiendo por qué configurar estos debería funcionar, ya que la idea es alejar el foco de los cuadros de Editar Texto.
Protean
¿Quizás solía alejar el foco de los cuadros EditText alejándolo del diseño principal? Pero ya no, parece.
Protean
13

Intenta declararlo en un archivo manifiesto

<activity android:name=".HomeActivity"
      android:label="@string/app_name"
      android:windowSoftInputMode="stateAlwaysHidden"
      >
androidify
fuente
11

Si está utilizando el nivel 21 de API, puede usar editText.setShowSoftInputOnFocus (falso);

SaraVF
fuente
9

Simplemente agregue AndroidManifest.xml

<activity android:name=".HomeActivity"  android:windowSoftInputMode="stateHidden">
</activity>
Dayanand Waghmare
fuente
8

Simplemente agregue esto en su archivo manifest.xml

<activity android:name=".MainActivity"
            android:windowSoftInputMode="stateHidden">

Ya terminaste.

Androido
fuente
7

También puede escribir estas líneas de código en el diseño primario directo del archivo de diseño .xml en el que tiene el "problema":

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

Por ejemplo:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    ...
    android:focusable="true"
    android:focusableInTouchMode="true" >

    <EditText
        android:id="@+id/myEditText"
        ...
        android:hint="@string/write_here" />

    <Button
        android:id="@+id/button_ok"
        ...
        android:text="@string/ok" />
</LinearLayout>


EDITAR:

Ejemplo si EditText está contenido en otro diseño:

<?xml version="1.0" encoding="utf-8"?>
<ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    ... >                                            <!--not here-->

    ...    <!--other elements-->

    <LinearLayout
        android:id="@+id/theDirectParent"
        ...
        android:focusable="true"
        android:focusableInTouchMode="true" >        <!--here-->

        <EditText
            android:id="@+id/myEditText"
            ...
            android:hint="@string/write_here" />

        <Button
            android:id="@+id/button_ok"
            ...
            android:text="@string/ok" />
    </LinearLayout>

</ConstraintLayout>

La clave es asegurarse de que EditText no sea directamente enfocable.
¡Adiós! ;-)

Jack T
fuente
6

La mejor solución para mí, pega tu clase

@Override
public void onResume() {
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    super.onResume();
}

@Override
public void onStart() {
    this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
    super.onStart();
}
Efe ÖZYER
fuente
3

Función para ocultar el teclado.

public static void hideKeyboard(Activity activity) {
    View view = activity.getCurrentFocus();

    if (view != null) {
        InputMethodManager inputManager = (InputMethodManager) activity.getSystemService(Context.INPUT_METHOD_SERVICE);

        inputManager.hideSoftInputFromWindow(view.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
    }
}

Ocultar el teclado en el archivo AndroidManifext.xml.

<activity
    android:name=".MainActivity"
    android:label="@string/app_name"
    android:theme="@style/AppTheme"
    android:windowSoftInputMode="stateHidden">
Philip BH
fuente
3

Para ampliar la respuesta aceptada por @Lucas:

Llama a esto desde tu actividad en uno de los primeros eventos del ciclo de vida:

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);

Kotlin Ejemplo:

override fun onResume() {
  super.onResume()

  window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN)
}
Trevor.Tornillos
fuente
2

Puede probar este conjunto de atributos únicos para cada elemento

TextView mtextView = findViewById(R.id.myTextView);
mtextView.setShowSoftInputOnFocus(false);

El teclado no se mostrará mientras el elemento esté enfocado

Somwang Souksavatd
fuente
Si bien esto podría responder a la pregunta de los autores, carece de algunas palabras explicativas y / o enlaces a la documentación. Los fragmentos de código sin formato no son muy útiles sin algunas frases a su alrededor. También puede encontrar cómo escribir una buena respuesta muy útil. Edite su respuesta - De la opinión
Nick
1
//to hide the soft keyboard
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
Yuliia Ashomok
fuente
0

solo agregue esto a su Actividad:

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
      if (getCurrentFocus() != null) {
           InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
           imm.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
      }
      return super.dispatchTouchEvent(ev);
}
haythem souissi
fuente