¿Hay alguna forma de cambiar el valor de android: windowSoftInputMode de la clase java?

82

Quiero que mis pestañas tengan windowSoftInputModepropiedades diferentes para cada pestaña. ¿Cómo acceder a esta propiedad desde la clase Java cuando todo el manejo de su pestaña se realiza desde una sola actividad?

¿Hay alguna forma de acceder a esta propiedad de manifiesto desde el código java?

Prasham
fuente

Respuestas:

124

Utilice lo siguiente para cambiar el softInputMode de una actividad.

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

Utilice lo siguiente para cambiar el tipo de entrada suave para un EditText.

mEditText.setImeOptions(EditorInfo.IME_ACTION_DONE);

Gracias a @Eliezer por la corrección.

AjOnFire
fuente
20
Gracias por este método setSoftInputMode ... Realmente me ayudó ... Información adicional: Para acceder a propiedades como adjustPany adjustResizepuedes ir a WindowManager.LayoutParamsclase, puedes encontrar muchas constantes útiles que se pueden usar en el setSoftInputModemétodo
Prasham
7
@SureshBora combiné la respuesta de @ 66CLSjY y @aman y finalmente obtuve esto: getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);ya lo probé y realmente funciona
Humberto Castañeda
1
¿Cómo es esta la respuesta correcta? Según developer.android.com/reference/android/view/… los únicos valores aceptables para pasar Window#setSoftInputModesonWindowManager.LayoutParams.SOFT_INPUT_*
Eliezer
4
@ 66CLSjY No me funciona. ¿Puedes decirme qué me estoy perdiendo? Llamo a esto dentro de una actividad: getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);pero el teclado aún empuja hacia arriba mi FrameLayout, que está por encima de otras vistas. Pero solo eso, otros puntos de vista permanecen en su lugar. Funciona, cuando lo agrego al manifiesto, pero no quiero aplicarlo para toda la actividad.
Tamás Kozmér
1
¿Llamó a setSoftInputMode antes de setContentView en onCreate ()?
AjOnFire
36

Según el comentario de Prasham , hice esto y me salvó la vida, ¡gracias a él! El modo EditTexty SoftWindowInputtiene bastantes errores cuando tiene un diseño con ScrollViewy lo está llenando dinámicamente.

Como había leído esta publicación pero seguí leyendo otras respuestas / comentarios (como la de Prashan), decidí escribirla en una nueva publicación.

Debajo del código que usé con mi ScrollView:

Activity.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
un hombre
fuente
7
hola aman, es un poco difícil leer tu respuesta aquí. Puedo ver que está muy agradecido con Prashan, pero ¿podría borrar algunos de los comentarios personales y explicar lo que este código ayudará a resolver? Gracias.
Taryn East
1
Hm, no funciona, al menos para configurar para ajustar la sartén. Funciona solo si lo pongo en el manifiesto.
Ixx
Esto está bloqueando la aplicación.
Farrakh Javed
10

Mi objetivo es usar dos modos diferentes para pestañas. Los modos son SOFT_INPUT_ADJUST_RESIZEy SOFT_INPUT_ADJUST_NOTHING.

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

La línea de código anterior simplemente no funciona por sí sola. La aplicación siempre se comporta en un estado ADJUST_NOTHING. Sin embargo, si windowSoftInputMode="adjustResize"se inserta en la <activity>etiqueta del archivo AndroidManifest.xml, la ventana de la aplicación cambia de tamaño de forma predeterminada. Además, cuando llame a la siguiente línea

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

se comportará como se esperaba y no se cambiará el tamaño de nada.

PS mejora a la respuesta

Shnkc
fuente
1
Necesito barajar entre CAMBIAR TAMAÑO y NADA, cómo puedo hacerlo una vez que vuelva a nada programáticamente, no cambia para cambiar el tamaño.
Taranmeet Singh
1
Esta es una buena observación. Básicamente, la configuración windowSoftInputMode="adjustResize"en el manifiesto ayuda a manejar esta bandera más adelante. Especialmente en un escenario en el que tiene principalmente Fragmentos en Actividad única. Por lo tanto, uno puede seguir cambiando dinámicamente el estado de entrada de la Actividad cambiando programáticamente de SOFT_INPUT_ADJUST_RESIZE nuevo a SOFT_INPUT_ADJUST_NOTHING bajo demanda. ¡Buena esa!
sud007
0

Puede utilizar el siguiente código mediante programación

android.view.inputmethod.InputMethodManager imm = (android.view.inputmethod.InputMethodManager) context
                .getSystemService(Context.INPUT_METHOD_SERVICE);
        imm.hideSoftInputFromWindow(myEditText.getWindowToken(), 0);

Gracias Deepak

Sunil Kumar Sahoo
fuente
0

En Xamarin Android se puede hacer programáticamente así

 protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.DetailDesign);
             Window.SetSoftInputMode(SoftInput.AdjustPan);
        }
zubairz
fuente