android android-3.0-honeycomb android-4.0-ice-cream-sandwich android-dialog

android - ¿Qué hay de malo con el tema de ICS Holo Dialog?



android-3.0-honeycomb android-4.0-ice-cream-sandwich (4)

Intente cambiar su LinearLayout por un RelativeLayout. Eso hará el truco :)

De alguna manera, LinearLayouts siempre llena la pantalla cuando se muestra en un diálogo. RelativeLayouts no lo hacen.

He encontrado un poco de un problema extraño con las actividades que utilizan el tema Holo Dialog ( @android:style/Theme.Holo.Dialog ) en Ice Cream Sandwich.

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

Ejemplo:

La forma correcta (Honeycomb)

La forma incorrecta (Ice Cream Sandwich)

Ambos dispositivos ejecutan la misma versión exacta de la aplicación y utilizan el mismo diseño exacto. 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 altura y ancho. ¿Está roto el tema del diálogo en ICS?

Actualizar:

He realizado algunas pruebas más, y parece que 894dp de ancho o menos producirán el aspecto "correcto", pero si configuro el ancho a 895dp o más, será el aspecto incorrecto. El emulador está actuando de la misma manera. Esto es extremadamente raro ...


No creo que sea cierto que ICS desalienta los diálogos. De hecho, tienen una página entera en Android Design . Lo que es cierto es que se DialogFragment (que incluso se proporciona en la biblioteca de soporte de Android ) en lugar del Dialog heredado.

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

Si profundiza en la fuente, 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 Holo.Dialog.FixedSize 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 tal vez estaría equivocado. Intentaré averiguar qué causa el salto.


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


Todas las versiones de Android ignoran el ancho / alto de un xml de diseño temático de Dialog.

Para arreglar esto, después de llamar:

setContentView(R.layout.contacts_preferences);

añadir una línea:

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

o WRAP_CONTENT para sus necesidades.