2011-06-19 13 views
13

Todas las diferentes resoluciones de los diferentes productos de Android me están volviendo loco.Cómo soportar todas las diferentes resoluciones de productos Android

Mi primera aplicación de Android que escribí fue diseñada para que admitiera las tres resoluciones comúnmente utilizadas: 240x320 (LDPI), 320x480 (MDPI) y 480x800 (HDPI). El 480x854 no dañó el diseño porque tiene el mismo ancho que 480x800.

también me he comprado los siguientes dispositivos para probar mis aplicaciones de Android en: Samsung Galaxy Europa (LDPI) HTC Desire Z (IPAP)

Por suerte mi novia tiene un HTC Wildfire S (MDPI), así que Tengo la mayoría de las resoluciones cubiertas.

Pero hoy, mi hermano descargó mi aplicación en su nuevo HTC Sensation que tiene otra resolución de 540x960 (¿HDPI?). Lo cual no mostró mi aplicación como debería y probablemente la mayoría de las tabletas tampoco lo mostrarán correctamente.

Lo que he hecho con mi primera aplicación se leyó la densidad y luego configurar los parámetros:

public void set_ui_parameters() { 
    DisplayMetrics metrics = new DisplayMetrics(); 
    getWindowManager().getDefaultDisplay().getMetrics(metrics); 

    if(metrics.densityDpi == DisplayMetrics.DENSITY_HIGH){ 
     textSize = 35;  
     timeWidth = 80; 
     dayWidth = 110; 
     moneyWidth = 50; 
    } else if(metrics.densityDpi == DisplayMetrics.DENSITY_MEDIUM){ 
     textSize = 35;  
     timeWidth = 53; 
     dayWidth = 73; 
     moneyWidth = 33; 
    } else if(metrics.densityDpi == DisplayMetrics.DENSITY_LOW){ 
     textSize = 28; 
     timeWidth = 40; 
     dayWidth = 55; 
     moneyWidth = 25; 
    } 
} 

Además de los parámetros También he creado para dibujables LDPI, MDPI y IPAP. Esto funciona bien para las resoluciones descritas anteriormente, pero esto depende de la resolución de pantalla i.c.w. el tamaño de la pantalla y falla, por ejemplo, el HTC sensatoin con 540x960.

Sé que no todas las resoluciones se utilizan con tanta frecuencia, pero me gustaría apoyar tantas como sea posible. Stats of Screen Sizes and Densities

He leído Supporting Multiple Screens varias veces pero no he encontrado una respuesta clara a este "problema".

¿Debo leer la resolución y configurar los parámetros según las resoluciones en lugar de la densidad? ¿Es esto algo inteligente o cómo lidiar con esto?

¡Muchas gracias por su información!

Respuesta

27

No tiene que hacer eso para admitir diferentes densidades. Lo que debes hacer es crear diferentes carpetas de recursos:

res/values-ldpi/dimens.xml 
res/values-mdpi/dimens.xml 
res/values-hdpi/dimens.xml 

Luego Android decidirá qué archivo usar. Puede tener algo como:

<!-- in values-ldpi/dimens.xml --> 
<dimen name="textSize">25dip</dimen> 

y ..

<!-- in values-mdpi/dimens.xml --> 
<dimen name="textSize">20dip</dimen> 

etc, y usted no debe preocuparse por resolución ... hay un montón de diferentes tamaños resoluciones por lo que sería un infierno para tomar decisiones basadas en eso.

Además, si utiliza dp en lugar de píxeles, casi nunca tendrá que crear archivos de dimensiones diferentes para cada densidad. Por supuesto, a veces tienes que hacerlo, pero depende de la aplicación.

+0

Gracias los valores es muy útil, pero esto no resuelve el problema con la resolución de 540x960 o estoy equivocado. Porque SQRT (540^2 + 960^2) /4.3 = 256,15 (HTC Sensation) es aproximadamente lo mismo que SQRT (480^2 + 800^2) /3,7 = 252,15 (HTC Desire Z) y ambos lo harán ser indexado como HDPI donde como la pantalla de la Sensación es 60px más ancha. – patrick

+2

Sí ... el problema aquí es que no podrá manejar el 100% de los tamaños de pantalla. Entonces, por ejemplo ... si quiere que una vista de texto cubra exactamente el ancho de las pantallas, incluso si aplica todas las técnicas posibles, habrá algunos dispositivos que envolverán el texto o algo así. Mi punto es que no puedes hacer que tu aplicación se vea exactamente como quieres en todos los dispositivos ... tienes que conformarte con hacerlo lo mejor posible. – Cristian

0

Ahora, sólo estoy adivinando aquí, ya no se muestra el resto de la aplicación, pero estoy asumiendo que usted está utilizando esas mediciones derivadas como px

Tome un vistazo a dp. Eso esencialmente hace todas esas cosas que hiciste, automáticamente, para cualquier dispositivo.(Pixel independiente del dispositivo)

0

No se preocupe por la ligera diferencia en la resolución: 540x960 es solo un poco más grande que 480x800. El espacio vertical extra es fácil: le da más espacio para sus listas. Para el espacio horizontal, siempre que maneje sus diseños correctamente, tendrá simplemente un relleno adicional (30pix ea) en los laterales.

Desafortunadamente, las imágenes de ancho completo (480 de ancho) son un problema un poco más grande. Si desea imágenes perfectas en píxeles, querrá usar scaleType = "center" para que la imagen se centre pero no en escalas. Si desea ancho completo, puede usar scaleType = "fitCenter" para que se complete. Va a ser un poco confuso ... pero hay muchas cosas en Android ;-)

0

Me topé con este problema también, excepto que mi aplicación es un juego donde hay un lienzo SurfaceView que dibujo imágenes de fondo y sprites a (similar al ejemplo LunarLander).

La forma en que lo maneja aquí es ampliar su imagen de fondo al tamaño más grande que está dispuesto a admitir (540x960) pero mantiene todas las cosas importantes (como botones, texto, información, etc.) dentro de un rectángulo más pequeño 480x800. Puede extender la imagen en sí o simplemente agregar bordes. La clave es que no hay nada importante allí.

Las personas con teléfonos 480x800 verán su aplicación normal. Las personas con teléfonos 540x960 verán un poco más de borde.

1

Lo único que tienes que hacer es configurar Android: minSdkVersion en 7 o superior en tu archivo de manifiesto. Es posible que algunas vistas aparezcan ligeramente diferentes, pero la aplicación es aplicable y en pantalla completa.

Cuestiones relacionadas