12

Mi actividad tiene androide: windowSoftInputMode = "adjustResize" y se comporta en consecuencia en Android 2.1:Honeycomb (3.1) adjustResize ya no funciona?

Antes de teclado en pantalla aparece

Before soft keyboard appears

Con el teclado

Keyboard behavior in 2.1 (good)

Sin embargo, en El teclado suave Honeycomb no cambia el tamaño de mi diseño, en su lugar cubre los botones:

Keyboard behavior in Honeycomb (bad)

mismo comportamiento en tanto el Galaxy Tab de 10 pulgadas y el Motorola Xoom.

He revisado mi diseño varias veces intentando que sea compatible con Honeycomb, pero sin resultado. El teclado virtual presionará hacia arriba una vista de Editar Texto, pero no los botones.

Here is a simple app project demonstrating the problem.

Editar: Enlace fijo.

La disposición usada:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 
    <LinearLayout 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:gravity="center_horizontal" 
     android:layout_alignParentBottom="true"> 
     <Button 
      android:id="@+id/save" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Save" /> 
     <Button 
      android:id="@+id/cancel" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Cancel" /> 
    </LinearLayout> 
    <ScrollView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:layout_alignParentTop="true"> 
     <EditText 
      android:layout_height="wrap_content" 
      android:layout_width="fill_parent" /> 
    </ScrollView> 
</RelativeLayout> 

La única cuestión relacionada con lo que he encontrado es this, pero desactivar la aceleración por hardware no tuvo ningún efecto para mí. También leí el Android guide on making your app compatible with input methods, pero no reconocí ninguna solución allí.

¿Estoy haciendo algo obviamente incorrecto? ¿O es este un error en el que alguien tiene más información?

+0

Posiblemente relacionado: si configura la altura de desplazamiento en fill_parent, en Honeycomb los botones no se pueden hacer clic porque la vista de desplazamiento se superpone a los botones y pierden el foco. No es el caso en 2.1, sin embargo. –

+0

Parece que funciona bien para mí en el emulador de 3.1, tanto con y sin 'android: windowSoftInputMode'. Todo lo que hice fue crear un nuevo proyecto y reemplazar el main.xml con tu diseño. No pude descargar su proyecto de muestra. –

+0

@Nicklas Odd, en el emulador encuentro que tanto 3.1 como 2.1 presentan el problema: el teclado suave cubre los botones. Corregí el enlace. –

Respuesta

14

Hola, he comprobado su código.

por favor, elimine debajo de la línea en "AndroidManifest.xml "

android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" 

y después comprobar a continuación, ajustar el tamaño de la pantalla

Si cualquier consulta PLZ me dejó saber

+0

Whoa tiene razón, ¡ese tema sí rompe el redimensionamiento en 3.1! Ahora, ¿por qué sería eso? Voy a buscar una solución alternativa de pantalla completa ahora, ¡pero muchas gracias por la sugerencia! –

+0

He confirmado que es la parte de pantalla completa del tema lo que rompe en Honeycomb, lo cual tiene sentido dado que las aplicaciones de Honeycomb son todas de "pantalla completa". Necesito ese ajuste, sin embargo, dado que me estoy centrando en 2.1, Honeycomb parece carecer de compatibilidad hacia atrás allí. Podría enviar un informe de error cuando tenga la oportunidad. ¡Gracias de nuevo! –

+0

Nathan, ¿has enviado un informe de error para esto? –

3

El modo adjustResize definitivamente funciona; lo verá en acción en toda la interfaz de usuario.

Entonces la pregunta es: ¿por qué no está configurado para su aplicación?

Lo primero que puede hacer es usar "adb shell dumpsys window" para ver la información sobre su ventana, que incluirá el modo de entrada suave que establece su WindowManager.LayoutParams. El valor impreso allí es el número bruto; busca aquí su significado: http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#SOFT_INPUT_ADJUST_NOTHING

Si tu ventana no tiene realmente AdjustResize allí, entonces necesitarás profundizar y ver por qué eso no se está estableciendo. Todo lo demás es normal, si configuras ese modo en la actividad, se establecerá en la ventana como siempre. Deberá buscar algo más que esté haciendo y que esté causando que se modifique en su ventana.

Si su ventana tiene adjustResize seleccionado, entonces, por algún motivo, su jerarquía de vistas no está realmente cambiando de tamaño. No hay diferencias importantes que conozca en la plataforma que podrían hacer que esto no funcione (y de nuevo se puede ver que funciona en otro lugar en la interfaz de usuario de stock). Lo primero que le sugiero que haga aquí es usar HierarchyViewer para ver qué está sucediendo en su jerarquía de vistas.

+0

Muchas gracias: la bandera no parece configurarse en el volcado de ventanas. Tratando de descubrir el problema ... –

+0

Dianne, ¿puedes decirnos por qué ese Tema deshabilita esa bandera? – nmr

Cuestiones relacionadas