VISITAS:

viernes, 19 de octubre de 2012

ANDROID: Resoluciones, pixels, densidad...

Resoluciones típicas

Android define las siguientes resoluciones de pantalla típicas:
  • QVGA: 240 x 320 pixels
  • HVGA: 320 x 480 pixels
  • WQVGA: 240 x 432 pixels
  • WVGA: 480 x 800 pixels
  • WXGA: 1280 x 800 pixels
La densidad de pixels de un dispositivo es el número de pixels por pulgada física de pantalla (dpi).
¿Cómo calcular la densidad de pixels de un dispositivo? Normalmente conocemos la resolución horizontal y vertical en pixels, además del tamaño de la pantalla en pulgadas (diagonal).
Sean:
h = resolución horizontal en pixels
v = resolución vertical en pixels
i = diagonal en pulgadas
A partir de estos datos podemos calcular la densidad de pixels por pulgada de la siguiente forma:

dpi = sqrt( h * h + v * v) / i

Por ejemplo, w=1280 pixels, h=800 pixels, i = 10.1 pulgadas.
dpi = sqrt( 1280 * 1280 + 800 * 800) / 10.1 = 149 dpi

Tamaños de pantalla

Android define los siguientes tamaños de pantalla (son valores aproximados):
  • small: desde 2 pulgadas a 3 pulgadas
  • normal: desde 3 pulgadas a 4.5 pulgadas
  • large: desde 4.5 pulgadas hasta 7 pulgadas
  • xlarge: desde 7 pulgadas hasta 10 pulgadas

Densidades de pantalla

Android define las siguientes densidades:
  • ldpi: desde 100 hasta 150
  • mdpi: desde 150 hasta 200
  • hdpi: desde 200 hasta 250
  • xhdpi: desde 250 hasta 300

Programación para varias densidades de pantalla

Las distintas densidades siguen las siguientes proporciones aproximadamente: 3 : 4 : 6 : 8
Así, si tenemos un bitmap de 100x100 pixels para mdpi, deberíamos tener las versiones del bitmap siguientes:
  • 75x75 para ldpi
  • 150x150 para hdpi
  • 200x200 para xhdpi
Y de esta forma, el bitmap saldrá con el mismo tamaño real en todas las densidades de pantalla.
Cuando se programa para Android, siempre se deben especificar los tamaños en dp (density pixels). 1 dp es un pixel en una pantalla mdpi de 160 dpi.
Si especificamos los tamaños en dp, entonces Android convierte los dp a pixels aplicando la siguiente fórmula:
pixels = dp * dpi / 160
Si por ejemplo, un botón tiene un ancho de 100 dp, entonces en una pantalla de 200 dpi Android le dará un tamaño de 100 * 200 / 160 = 125 pixels. Sin embargo, en una pantalla de 100 dpi, Android le dará un tamaño de 100 * 100 / 160 = 62 pixels. El tamaño visual será siempre el mismo.
Se recomienda que los objetos que puede pulsar el usuario con el dedo tengan un tamaño de al menos 45x45 dp.

3 comentarios:

  1. Saludos, y excelente tutorial.

    Al leer este post, aún tengo la siguiente inquietud, si yo tengo imágenes originales de productos de 90 x 149 pixeles, y quisiera mostrarlas en android, bajo los diferentes tamaños y densidades comentadas en dicho post, ¿qué fórmula debería aplicar para calcular la resolución de cada una de dichas imágenes, para cada una de las diferentes escalas descritas?

    Gracias de antemano.

    ResponderEliminar