¿Cómo eliminar el enfoque automático / ventana emergente de teclado de un campo cuando aparece la pantalla?


105

Tengo una pantalla donde el primer campo es un EditText, y gana el foco al inicio, también muestra el tipo de entrada numérica, lo cual es muy molesto

¿Cómo puedo asegurarme de que cuando se inicia la actividad no se gana el foco y / o no se eleva el panel de entrada?

Respuestas:


157
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editTextField.getWindowToken(), 0);

o

establezca la propiedad de actividad en el archivo de manifiesto como se muestra a continuación en la etiqueta de la aplicación

android:windowSoftInputMode="stateHidden"

La configuración de android: windowSoftInputMode en el archivo AndroidManifest.xml se puede combinar con otros valores. El modo generalmente implica valores únicos, pero en este caso, el valor es una colección de banderas. Descripción de valores:Formats: flag Values: adjustNothing, adjustPan, adjustResize, adjustUnspecified, stateAlwaysHidden, stateAlwaysVisible, stateHidden, stateUnchanged, stateUnspecified, stateVisible Specify the default soft-input mode for the main window of this activity. A value besides "unspecified" here overrides any value in the theme.
Jeff Muir

145

vaya al archivo de manifiesto de su aplicación y escriba esta línea para la actividad que desea deshabilitar la ventana emergente automática del teclado.

android:windowSoftInputMode="stateHidden"

No funcionó para mí. Lo puse en activity_main.xml. Esto funcionó perfecto cuando lo puse en onCreate (). getWindow (). setSoftInputMode (WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
glez

20

Para no mostrar programáticamente el teclado, pero el widget predeterminado aún recibe la llamada de enfoque:

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

en onResume()


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

llamar al método anterior dentro de onCreate () . Evita que softKeyboard se muestre a menos que el usuario seleccione EditText portapping or clicking.

o simplemente agregue la android:windowSoftInputMode="stateHidden"etiqueta de actividad enManifest.xml


10

Esto suele ser un desastre. Lo primero que intento es intentar robar el foco con otra vista vía. También debe tener el InTouchMode enfocable y enfocable.

<TextView
  ...
  android:focusable="true"
  android:focusableInTouchMode="true">

    <requestFocus/>
</TextView>

Esto funciona. Siento que este es un enfoque más limpio, pero también depende de cómo sean sus condiciones. Acepto este.
JaydeepW

5

Tener otra vista, agarrar el foco. De forma predeterminada, la primera vista enfocable se enfocará cuando se infla un diseño. Puede solicitar el enfoque en una vista diferente a través de XML:

<TextView
    android:layout_width="wrap_parent"
    android:layout_height="wrap_content"
    android:text="Some other view">

    <requestFocus />
</TextView>

Esto funciona para cualquier vista.

Si desea hacerlo mediante programación, puede usar view.requestFocus().


0
if(getWindow().getAttributes().softInputMode==WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED)
{
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}

3
¡Bienvenido a StackOverflow! Este no es como otros foros, si desea cambiar su respuesta, simplemente haga clic en el editenlace y realice los cambios. Y por favor intente formatear su código seleccionando su código y usando el botón Código de muestra {}o presionando Ctrl+K.
Peter Lang

0

Agregar android:windowSoftInputMode="stateHidden"a su actividad en el manifiesto solo oculta el teclado cuando está iniciando la actividad, o como dice Google

Cuando el usuario navega afirmativamente hacia adelante a la actividad, en lugar de retroceder debido a que abandona otra actividad.

Para ocultar el teclado también cuando el usuario presiona el botón Atrás y regresa a su actividad desde alguna otra actividad, use android:windowSoftInputMode="stateAlwaysHidden"


-1

no he intentado esto ni estoy cerca de mi computadora de programación, pero sospecho que enviar el enfoque mediante programación a la vista principal o algo de esa naturaleza podría funcionar; es más probable que sea una solución alternativa que una solución, pero nuevamente no puedo probarlo solo un pensamiento


1
Lo he intentado pero no funciona. Llamé .requestFocus();a un botón y aún aparecen las ventanas emergentes del teclado.
Pentium10

pensamientos se pueden agregar como comentarios
Alberto M
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.