Explicamos la esencia de Screen Density (Density Buckets) en Android — la clasificación de pantallas por densidad de píxeles: mdpi, hdpi, xhdpi, xxhdpi, xxxhdpi. Screen Density determina cuántos píxeles físicos caben en una pulgada de pantalla y afecta directamente cómo se muestran las imágenes y la interfaz en diferentes dispositivos. Según Google Android Compatibility Definition (2025), Android admite 6 Density Buckets principales y hasta 8 adicionales para dispositivos plegables.
Puntos clave
Screen Density es la cantidad de píxeles físicos por pulgada de pantalla (ppi — píxeles por pulgada, o dpi — puntos por pulgada). Android utiliza el concepto de Density Buckets — grupos de pantallas con densidad similar que utilizan los mismos factores de escala. A diferencia de la resolución (cantidad de píxeles en ancho y alto), la densidad determina el tamaño físico de un píxel en la pantalla. Según Google Pixel Team (2025), la densidad de los buques insignia modernos es de 450-550 ppi, lo que corresponde al bucket xxhdpi-xxxhdpi.
El sistema de Density Buckets apareció en Android 1.6 Donut (2009) con los primeros dispositivos a 160 dpi (mdpi). A medida que crecía la resolución de pantalla, se agregaron nuevos buckets: hdpi (Android 1.6), xhdpi (Android 2.3), xxhdpi (Android 4.1), xxxhdpi (Android 4.4). Cada nuevo bucket reflejaba un aumento de 1.5× o 2× en densidad respecto al anterior. Según Android Open Source Project (2025), el 96% de los dispositivos Android activos tienen densidades que van de hdpi a xxxhdpi.
Density Buckets son rangos de densidad definidos por Google para agrupar pantallas Android. El bucket base es mdpi (160 dpi). El factor de escala muestra cuántas veces más grande es un recurso para un bucket dado en comparación con mdpi. Por ejemplo, xhdpi (2×) significa que la imagen debe ser 2 veces más grande en ancho y alto que su versión mdpi. Según Android Studio Resource Manager (2025), xxhdpi es el bucket más común entre los dispositivos activos (38% de cuota de mercado), seguido de xhdpi (28%).
| Bucket | Rango DPI | Escala | Ejemplo de dispositivo | Cuota de mercado (2025) |
|---|---|---|---|---|
| ldpi | 120 dpi | 0.75× | Dispositivos económicos antiguos | Menos del 1% |
| mdpi | 120-160 dpi | 1× | HTC Dream (G1), tablets de 7" | 3% |
| hdpi | 160-240 dpi | 1.5× | Samsung Galaxy S2, Nexus 4 | 12% |
| xhdpi | 240-320 dpi | 2× | Google Nexus 5, Moto G | 28% |
| xxhdpi | 320-480 dpi | 3× | Samsung Galaxy S8, Pixel 3 | 38% |
| xxxhdpi | 480-640 dpi | 4× | Samsung Galaxy S24 Ultra, Pixel 9 Pro | 18% |
Resolución de pantalla es la cantidad total de píxeles en ancho y alto (por ejemplo, 1080×2400). Densidad de pantalla es la cantidad de píxeles por pulgada. Dos dispositivos con la misma resolución pueden tener densidades diferentes si sus tamaños físicos de pantalla difieren. Por ejemplo, un teléfono de 6 pulgadas con resolución 1080×2400 tiene una densidad de aproximadamente 440 dpi (xxhdpi), mientras que un teléfono de 5 pulgadas con la misma resolución tiene aproximadamente 530 dpi (xxxhdpi). Esta es una diferencia clave: la interfaz debe adaptarse no a la resolución sino a la densidad, de lo contrario los elementos serán demasiado pequeños en dispositivos de alta densidad.
Android utiliza calificadores en los nombres de carpetas res para cargar recursos para una densidad de pantalla específica: drawable-mdpi, drawable-hdpi, drawable-xhdpi, drawable-xxhdpi, drawable-xxxhdpi. Cuando la aplicación se inicia, Android selecciona los recursos de la carpeta que mejor coincide con la densidad del dispositivo. Si no hay una coincidencia exacta, el sistema usa el bucket más cercano o escala un recurso de una densidad inferior. Según Android Docs (2025), los calificadores de densidad no son necesarios para vectores (VectorDrawable) — se escalan automáticamente.
/res/
drawable-mdpi/
icon_app.png (48x48 px)
drawable-hdpi/
icon_app.png (72x72 px)
drawable-xhdpi/
icon_app.png (96x96 px)
drawable-xxhdpi/
icon_app.png (144x144 px)
drawable-xxxhdpi/
icon_app.png (192x192 px)
En esta estructura, cada carpeta contiene el mismo icono pero en un tamaño físico de píxel diferente. El tamaño base de 48×48 píxeles para mdpi se multiplica por el factor de escala para cada bucket. Android selecciona automáticamente el archivo correcto basándose en DisplayMetrics.density del dispositivo. Para VectorDrawable (formato XML), un solo archivo en drawable/ es suficiente — el sistema lo escala sin pérdida de calidad.
Calcular el tamaño de una imagen para cada densidad se basa en una fórmula simple: tamaño en mdpi × factor de escala. Si un icono en mdpi es de 48×48 px, entonces para hdpi será de 72×72 px (48 × 1.5), para xhdpi — 96×96 px (48 × 2), para xxhdpi — 144×144 px (48 × 3), para xxxhdpi — 192×192 px (48 × 4). Según Material Design Guidelines (2025), esta fórmula se aplica a todos los recursos rasterizados: iconos, fondos, imágenes y 9-patch.
| Bucket | Escala | Tamaño mdpi (px) | Tamaño en bucket (px) |
|---|---|---|---|
| mdpi | 1× | 48×48 | 48×48 |
| hdpi | 1.5× | 48×48 | 72×72 |
| xhdpi | 2× | 48×48 | 96×96 |
| xxhdpi | 3× | 48×48 | 144×144 |
| xxxhdpi | 4× | 48×48 | 192×192 |
La preparación adecuada de recursos para Density Buckets incluye cinco reglas clave. Primero, use VectorDrawable para iconos simples — esto elimina la necesidad de cinco copias. Segundo, para imágenes rasterizadas, exporte todas las densidades desde las herramientas de diseño (Android Studio Asset Studio las genera automáticamente). Tercero, evite colocar imágenes en drawable/ sin calificador — el sistema las escalará con pérdida de calidad. Cuarto, pruebe en un dispositivo con una densidad diferente a la suya principal — el emulador permite cambiar la densidad. Quinto, use WebP en lugar de PNG — según Google (2025), WebP ofrece un tamaño 25-35% menor con la misma calidad.
Preguntas frecuentes
mdpi (medium-density pixel-independent) — el bucket de densidad base en Android con una densidad de 160 dpi. Todos los demás buckets se calculan en relación con mdpi: hdpi — 1.5×, xhdpi — 2×, y así sucesivamente. mdpi corresponde a un píxel físico por píxel independiente de densidad (dp). Los diseñadores usan mdpi como referencia al crear diseños.
Use DisplayMetrics: getResources().getDisplayMetrics().density devuelve el factor de escala (1.0 para mdpi, 3.0 para xxhdpi). Para determinar el bucket mediante programación, llame a getResources().getConfiguration().densityDpi. Android Studio también tiene un Device Explorer que muestra densityDpi para dispositivos conectados.
Técnicamente — sí, pero con pérdida de calidad. Si un recurso solo está disponible en drawable-xxhdpi, en un dispositivo mdpi se reducirá 3× — la imagen se verá borrosa. Si el recurso solo está en mdpi, en xxhdpi se ampliará — pixelación. Se recomienda preparar al menos para xhdpi, xxhdpi y xxxhdpi — esto cubre el 84% de los dispositivos activos (2025). Para VectorDrawable, un solo archivo sin calificador es suficiente.
Resumen
Desarrollaremos una aplicación móvil llave en mano
IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.
Lea también