Empuje el contenido al hacer clic en editar texto

He buscado en todas partes una solución a mi problema pero no puedo encontrar una respuesta. Este es el problema.

Tengo un diseño que se parece a esto

La imagen está aquí

Ahora cuando hago clic en el texto de edición (barra de búsqueda) quiero que ocurra lo siguiente

La imagen está aquí

El teclado virtual básicamente necesita subir el contenido de toda la pantalla para que la barra de búsqueda esté en la parte superior y su vista de lista esté debajo de ella, de modo que cuando se busque el contenido, se muestren los resultados. He intentado configurar android:windowSoftInputMode="adjustPan" a la Activity en el manifiesto, pero esto no funcionó. Establecí una vista de desplazamiento como el contenedor principal en el diseño principal que contiene los fragmentos pero que tampoco funcionó. Intenté agregar el texto de edición (barra de búsqueda) como encabezado a la vista de lista, pero tampoco funcionó. Cada vez que el teclado empujaba hacia arriba el texto de edición, cubría la vista de lista. ¿Hay alguna manera de hacer funcionar esto?

En realidad, si desea que se despliegue todo su diseño, debe usar:

SOFT_INPUT_ADJUST_PAN

sentido:

 getActivity().getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN); 

esto mantendrá cerrado el teclado y cuando se abra empujará toda tu actividad hacia arriba.

Esto se puede usar en Fragment Class para mover el texto de edición hacia arriba y desplazarse hacia el final.

 getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 

Esto funcionará con seguridad si su tema Actividad Fragmento no está en Pantalla Completa.

Espero que esto ayude!

Esto funcionó para mí.

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

Prueba esto

 android:windowSoftInputMode="adjustResize" 

Trabajando para mi

Enfrenté un problema similar, la solución fue simple.

Si el tema de la actividad está configurado en Pantalla completa @android:style/Theme.Holo.NoActionBar.FullScreen , el teclado no empujaba el contenido hacia arriba.

Después de cambiar la actividad a @android:style/Theme.Holo.NoActionBar , el teclado ahora empuja hacia arriba el contenido de la actividad.

Pruebe con android:windowSoftInputMode="adjustResize" en su archivo de manifiesto.

Es posible que necesites hacer android:windowSoftInputMode="adjustResize|adjustPan" … Realmente no tengo nada comparable a tu configuración para probar …

Tu problema es debido a esto (de los documentos para adjustPan, énfasis mío):

La ventana principal de la actividad no se redimensiona para dejar espacio para el teclado virtual. Por el contrario, el contenido de la ventana se panoramiza automáticamente para que el enfoque actual nunca se oculte por el teclado y los usuarios siempre pueden ver lo que están escribiendo

Teniendo eso en cuenta, tu lista se está ocultando porque EditText en la parte superior tiene el foco. Lo único que actualmente puedo pensar es mover EditText para que esté debajo de la lista. Luego, cuando se lo presione hacia arriba, su lista aún debería estar visible sobre EditText.

Esto funcionó para mí, para fragmento, solo declararlo en Manifiesto con actividad:

 android:windowSoftInputMode="adjustPan" 

¡Buena suerte!

No pude encontrar una solución para que el diseño cambiara automáticamente, así que tuve que hackearlo. Usé el código que encontré aquí en mi actividad principal para detectar cuándo se abre el teclado. Acabo de agregar código para llamar a un método que oculta mis dos fragmentos superiores cuando se abre el teclado. Esto no es realmente lo que quería hacer, pero funciona.

Lo uso para mi EditText sesión de EditText :

 this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN|WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); 

Algunas notas sobre este método:

this se refiere al contexto, ya que getActivity() no siempre es preferible

 .SOFT_INPUT_STATE_HIDDEN //for default hidden state when activity loads .SOFT_INPUT_STATE_VISIBLE //for auto open keyboard when activity loads 

Funciona todo el tiempo!

Si alguien todavía enfrenta este problema:

  

agregue su diseño:

 android:fitsSystemWindows="true" 

Espero que esto resuelva tu problema, funcionó para mí.