2012-02-06 30 views
18

Me he encontrado con un problema extraño con las actividades que utilizan el tema Holo Dialog (@android:style/Theme.Holo.Dialog) en Ice Cream Sandwich.¿Qué pasa con el tema ICS Holo Dialog?

Parece que ignoran sus diseños y llenan toda la pantalla en lugar del ancho y el alto de diseño de sus diseños XML. Los mismos diseños funcionan como esperaba en Honeycomb, pero no en Ice Cream Sandwich.

Ejemplo:

La forma correcta (Honeycomb) enter image description here

La forma incorrecta (Ice Cream Sandwich) enter image description here

Ambos dispositivos se están ejecutando la misma versión de la aplicación, y están usando exactamente el mismo diseño. Aquí está el diseño en cuestión:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/linearLayout1" 
    android:layout_width="940dp" 
    android:layout_height="600dp" 
    android:layout_margin="10dp" > 

    <GridView 
     android:id="@+id/gridView1" 
     android:layout_width="940dp" 
     android:layout_height="600dp" 
     android:horizontalSpacing="10dp" 
     android:numColumns="3" 
     android:smoothScrollbar="true" 
     android:stretchMode="columnWidth" 
     android:verticalSpacing="10dp" > 
    </GridView> 

</LinearLayout> 

¿Alguna idea de cómo se puede resolver esto? Un problema similar ocurre en mi Galaxy Nexus basado en ICS, que ignora por completo la etiqueta match_parent para alto y ancho. ¿El tema del diálogo está roto en ICS?

Actualización:

que he hecho algunas pruebas más, y parece que 894dp de ancho o menos producirá el aspecto "correcta", pero si fijo el ancho de 895dp o más, es ll será el aspecto incorrecto. El emulador está actuando de la misma manera. Esto es extremadamente raro ...

enter image description here

+0

Eso parece extraño. Este es un plano en la oscuridad, pero a veces experimentaré fallas gráficas extrañas en mi aplicación después de cambiar el objetivo de compilación. No tengo idea de por qué, pero limpiar el proyecto siempre los arreglará. Como dije, dispararon en la oscuridad, pero puede ser así de simple. – adneal

+0

Gracias, lo intenté de nuevo, pero no pareció tener ningún efecto. Acabo de actualizar mi pregunta nuevamente, parece que está sucediendo entre 894 y 895 dp de ancho. –

+0

¿Las capturas de pantalla se toman con dos dispositivos separados? Su publicación asume que este comportamiento siempre funciona correctamente en HoneyComb pero no en ICS, pero ¿es posible que el problema que está teniendo dependa completamente del tamaño de la pantalla? De lo contrario, podría considerar crear dos AVD (uno que ejecute 3.0 y otro que ejecute 4.0) con el mismo tamaño de pantalla y probarlos con los dos para determinar si el problema depende realmente del número de versión del SDK de Android. –

Respuesta

6

No creo que sea cierto que ICS desaliente los diálogos. De hecho, tienen un total de page at Android Design. Lo que es cierto es que DialogFragment (que incluso se proporciona en el Android Support library) es preferido sobre el legado Dialog.

Corroboro su observación acerca del diálogo emergente a pantalla completa, pero el comportamiento depende del dispositivo. En mi tableta Xoom ocurre a 915 pb, no a 895. En mi Galaxy Nexus, sucede a 444 pb. Y en mi Galaxy Tab 10.1, no sucede en absoluto.

Si se mira en la fuente, se puede ver que hay un tema de diálogo que desciende de Holo para pantallas más pequeñas y de Holo.Dialog.FixedSize para los más grandes. Hubiera esperado que esto se basara en el tamaño de la pantalla, no en el tamaño del diseño, pero quizás estaría equivocado. Trataré de descubrir qué causa el salto.

+0

Gracias, sería excelente! Ni siquiera sabía del tema Holo.Dialog.FixedSize. –

+0

Estoy viendo este mismo problema: una actividad temática utilizando Theme.Holo.Light. El tema Dialog.NoActionBar se comporta correctamente en JellyBean pero tiene el problema anterior de "exceso de tamaño" en ICS. –

1

no pude encontrar una respuesta para esto mismo, por lo que finalmente caer el tema de diálogo y en su lugar utilizado un diseño de tema estándar de ancho completo. Creo que ICS desalienta el uso de diálogos, así que tal vez por eso haya cambiado.

0

Todas las versiones de Android ignoran el ancho/alto de un formato de cuadro de diálogo xml.

Para solucionar este problema, después de llamar a:

setContentView(R.layout.contacts_preferences); 

añadir una línea:

getWindow().setLayout(LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 

o WRAP_CONTENT para sus necesidades.

+0

No, no es así. Como dije, funciona bien en Honeycomb. –

0

Intente intercambiar su LinearLayout por una RelativeLayout. Eso hará el truco :)

De alguna manera LinearLayouts siempre llena la pantalla cuando se muestra en un cuadro de diálogo. RelativeLayouts no.