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

Pentium10
fuente

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"
Mitul Nakum
fuente
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"
sm.euro
fuente
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()

danmux
fuente
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

Xar-e-ahmer Khan
fuente
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>
urSus
fuente
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().

Jason Robinson
fuente
0
if(getWindow().getAttributes().softInputMode==WindowManager.LayoutParams.SOFT_INPUT_STATE_UNSPECIFIED)
{
    getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
}
Paul Liang
fuente
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"

Devansh Maurya
fuente
-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

Ben
fuente
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