La diferencia y relación entre píxel/resolución/densidad/múltiple/tamaño en Android
En Android, existe una estrecha relación entre los píxeles (px), la resolución, la densidad (dpi) y el tamaño.
-
**Pixel (px)** es la unidad más pequeña para mostrar imágenes en la pantalla. Cada píxel puede mostrar un color y varios píxeles combinados pueden mostrar imágenes complejas.
-
La resolución se refiere al número de píxeles en la pantalla. Por lo general, se expresa como el producto de ancho y alto, como 1920x1080. Cuanto mayor sea la resolución, más detalles se pueden mostrar en la pantalla.
-
**Densidad (dpi)** se refiere a la cantidad de píxeles por pulgada en la pantalla. Se utiliza para medir la nitidez de la pantalla. Cuanto mayor sea la densidad, más nítida aparecerá una imagen del mismo tamaño.
-
El tamaño se refiere al tamaño físico de la pantalla. Generalmente se expresa en pulgadas. Cuanto mayor sea el tamaño, más contenido se puede mostrar en la pantalla.
Existe una estrecha relación entre estos conceptos. Por ejemplo, la resolución y el tamaño determinan la densidad de la pantalla. Si dos pantallas tienen la misma resolución pero diferentes tamaños, la pantalla más pequeña tendrá una mayor densidad.
Además, hay un concepto importante en Android: múltiplos. El múltiplo se refiere a la relación entre la densidad de la pantalla y la densidad base (160 ppp). Se utiliza para convertir unidades de dp a unidades de píxeles. Por ejemplo, si la densidad de la pantalla es 320dpi, su múltiplo es 2, lo que significa que 1dp es igual a 2px.
densidad de pantalla múltiple
En el sistema Android, el múltiplo de densidad de pantalla se refiere a la relación entre la densidad de pantalla y la densidad de referencia (160 ppp). Se utiliza para convertir unidades de dp a unidades de píxeles. Por ejemplo, si la densidad de la pantalla es 320dpi, su múltiplo es 2, lo que significa que 1dp es igual a 2px.
Los niveles de densidad de pantalla y los múltiplos correspondientes en el sistema Android son los siguientes:
ldpi
: Para pantallas de baja densidad, el multiplicador es 0,75.mdpi
: Para pantallas de densidad media, el multiplicador es 1.hdpi
: Pantalla de alta densidad, el multiplicador es 1,5.xhdpi
: Pantalla de ultra alta densidad, el múltiplo es 2.xxhdpi
: Pantalla de ultra-ultra-alta densidad con un múltiplo de 3.xxxhdpi
: Pantalla de ultra-ultra-ultra-alta densidad con un múltiplo de 4.
Según los datos de Google Play, al 6 de enero de 2023, aproximadamente el 52,9 % de los dispositivos tienen 76.9%
una densidad de pantalla de xxhdpi y aproximadamente el 52,9 % de ellos tienen una densidad de pantalla de xhdpi. Esto significa que el múltiplo de densidad de pantalla de los dispositivos Android convencionales actuales es 2 o 3. Por lo tanto, en el desarrollo normal, los diseñadores de UI generalmente solo hacen un conjunto de borradores de diseño con imágenes xxhdpi 3 veces.
Obtenga densidad de pantalla de Android, densidad exacta, resolución, resolución exacta
Usa DisplayMetrics
una clase para obtener información sobre la pantalla de un dispositivo Android
Aquí hay un código de muestra que muestra cómo obtener la densidad de pantalla, la densidad exacta, la resolución, el tamaño y el multiplicador:
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int densityDpi = displayMetrics.densityDpi;
float xdpi = displayMetrics.xdpi;
float ydpi = displayMetrics.ydpi;
int widthPixels = displayMetrics.widthPixels;
int heightPixels = displayMetrics.heightPixels;
float widthInches = widthPixels / xdpi;
float heightInches = heightPixels / ydpi;
float density = displayMetrics.density;
float scaledDensity = displayMetrics.scaledDensity;
densityDpi
es la densidad de la pantalla, expresada en puntos por pulgada (dpi).
xdpi
y ydpi
son las densidades exactas de la pantalla en las direcciones X e Y.
widthPixels
y heightPixels
es la resolución de la pantalla en píxeles.
widthInches
y heightInches
son las dimensiones de la pantalla en pulgadas.
density
es el factor de escala de densidad (múltiplo) de la pantalla utilizada para convertir unidades de dp en unidades de píxeles.
scaledDensity
es la densidad de escala de la pantalla, utilizada para convertir unidades sp a unidades de píxeles.
Imprimir información de pantalla con Log
clase:
Log.d("ScreenInfo", "Density (dpi): " + densityDpi);
Log.d("ScreenInfo", "Exact density (xdpi): " + xdpi);
Log.d("ScreenInfo", "Exact density (ydpi): " + ydpi);
Log.d("ScreenInfo", "Resolution (widthPixels): " + widthPixels);
Log.d("ScreenInfo", "Resolution (heightPixels): " + heightPixels);
Log.d("ScreenInfo", "Exact resolution (widthInches): " + widthInches);
Log.d("ScreenInfo", "Exact resolution (heightInches): " + heightInches);
Log.d("ScreenInfo", "Density scale factor: " + density);
Log.d("ScreenInfo", "Scaled density: " + scaledDensity);
Mostrar información de la pantalla en AlertDialog
un cuadro de diálogo
El siguiente es un código de muestra que crea un cuadro de diálogo y muestra información de la pantalla en él:
String screenInfo = "Density (dpi): " + densityDpi + "\n" +
"Exact density (xdpi): " + xdpi + "\n" +
"Exact density (ydpi): " + ydpi + "\n" +
"Resolution (widthPixels): " + widthPixels + "\n" +
"Resolution (heightPixels): " + heightPixels + "\n" +
"Exact resolution (widthInches): " + widthInches + "\n" +
"Exact resolution (heightInches): " + heightInches + "\n" +
"Density scale factor: " + density + "\n" +
"Scaled density: " + scaledDensity;
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Screen Info");
builder.setMessage(screenInfo);
builder.setPositiveButton("OK", null);
builder.show();