2012-07-02 23 views
56

He buscado en todas partes una solución a mi problema pero no puedo encontrar una respuesta. Este es el problema.Empuje el contenido al hacer clic en Editar texto

que tienen un diseño que se parece a esto

Image is here

Ahora, cuando hago clic en la edición de texto (barra de búsqueda) Quiero lo siguiente a suceder

Image is here

El suave el teclado 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" al 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?

Respuesta

67

En realidad, si usted quiere toda su disposición una panorámica hacia arriba que se debe utilizar:

SOFT_INPUT_ADJUST_PAN

significado:

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

esto mantendrá el teclado cerrado y cuando se abre va a empujar a su toda la actividad arriba.

+2

¡Eres increíble! – Eenvincible

+0

Pero el diseño empuja hacia arriba cuando ingresa el primer carácter en el cuadro de edición. – Nivedh

+4

'adjustpan' funciona bien, pero al mismo tiempo, también quiero que mis botones que se encuentran en la parte inferior se coloquen sobre el teclado (lo que básicamente se logra con' adjustResize', pero no empuja todo el diseño hacia arriba, en última instancia, oculta el cuadro de texto en el que estoy ingresando datos. ¿Alguien puede ayudar? – driftking9987

7

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

Es posible que tenga que hacer android:windowSoftInputMode="adjustResize|adjustPan" ... Realmente no tengo nada comparable a la configuración de probar en ...

Su problema es porque de esta (de la documentación para adjustPan, el énfasis es mío) :

La ventana principal de la actividad no se redimensiona para dejar espacio para el teclado suave . Por el contrario, el contenido de la ventana se panoramizan automáticamente para que el enfoque actual nunca es oscurecida por el teclado y los usuarios siempre se puede ver lo que está escribiendo

Teniendo en cuenta que, su lista se está oscurecida robaba la 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.

+0

Gracias por la respuesta. Lo he intentado, no funcionó. El nuevo tamaño funciona, pero hace que el contenido se aplaste en la parte superior de la pantalla y se ve muy mal, también el contenido de la vista de lista no se muestra cuando se usa adjustResize. – Neil

+0

Actualicé mi respuesta, no es una solución real, sino una posible solución. – Barak

+0

Hola, Barak He intentado mover EditText debajo de la vista de lista pero esto no funcionó. También pensé que debería hacerlo, pero simplemente presionó EditText sobre la vista de lista y ocultó todo el contenido de la vista de lista. – Neil

3

No he podido encontrar una solución para que el diseño cambie automáticamente, así que tuve que hackearlo. Usé el código que encontré here 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.

8

Me enfrenté a un problema similar, la solución era 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.

+0

Gracias amigo! Pero, ¿sabes cómo configurarlo en pantalla completa? –

+0

También quiero pantalla completa e incluso el contenido de actividad no debería subir. ¿Alguna solución? – Nikita

19

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

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

Esto funcionará con seguridad si el tema de Fragment Activity no está en FullScreen.

Espero que esto ayude!

+0

esto funciona bien, pero el diseño empuja hacia arriba cuando ingresa el primer carácter en el cuadro de edición. ¿Cómo resolver? Por favor, hágamelo saber si usted sabe – siva

+0

@siva Me también enfrenta el mismo problema – Nivedh

+0

¡Funcionó! Muchas gracias – dearvivekkumar

10

Esto funcionó para mí.

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

utilizo esto para mi EditText entrada:

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

Algunas notas acerca de este método:

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

.SOFT_INPUT_STATE_HIDDEN //for default hidden state when activity loads 

.SOFT_INPUT_STATE_VISIBLE //for auto open keyboard when activity loads 

¡Funciona siempre!

9

probar este

android:windowSoftInputMode="adjustResize" 

trabajo para mí.

3

Esto funcionó para mí, para el fragmento, simplemente declarar que en el manifiesto con la actividad:

android:windowSoftInputMode="adjustPan" 

buena suerte!

+0

Tengo varios scroolviews y diseños relativos dentro de la vista de desplazamiento donde están mis vistas de texto de edición. Esto definitivamente funciona Pensé que tendría que ponerlo en cada texto de edición, resulta que esto es muy simple, jeje. ♥ –

0

Si alguien todavía se enfrenta a este problema:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    android:layout_width="match_parent" 
    android:id="@+id/view" 
    **android:fitsSystemWindows="true"** 
    android:layout_height="match_parent"> 

añadir en su diseño:

android:fitsSystemWindows="true" 

espero que esto resuelve su problema - que trabajó para mí.

Cuestiones relacionadas