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?


93
en su manifiesto<activity android:windowSoftInputMode="stateHidden" ...>
idiottiger


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.


¿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.


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">

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 :)


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"
      >

11

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


9

Simplemente agregue AndroidManifest.xml

<activity android:name=".HomeActivity"  android:windowSoftInputMode="stateHidden">
</activity>

8

Simplemente agregue esto en su archivo manifest.xml

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

Ya terminaste.


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! ;-)


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

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">

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

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


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

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