¿Cuál es la diferencia entre las unidades de medida de Android?
- px
- inmersión
- dp
- sp
¿Cuál es la diferencia entre las unidades de medida de Android?
Respuestas:
De la documentación para desarrolladores de Android :
px
Píxeles : corresponde a los píxeles reales en la pantalla.
en
pulgadas : según el tamaño físico de la pantalla.
1 pulgada = 2.54 centímetros
mm
Milímetros : según el tamaño físico de la pantalla.
Puntos pt : 1/72 de pulgada según el tamaño físico de la pantalla.
dp o dip
Density -dependiente de píxeles: una unidad abstracta que se basa en la densidad física de la pantalla. Estas unidades son relativas a una pantalla de 160 ppp, por lo que un dp es un píxel en una pantalla de 160 ppp. La relación de dp a píxel cambiará con la densidad de la pantalla, pero no necesariamente en proporción directa. Nota: El compilador acepta "dip" y "dp", aunque "dp" es más consistente con "sp".
Píxeles independientes de la
escala sp : es como la unidad dp, pero también se escala según la preferencia de tamaño de fuente del usuario. Se recomienda que use esta unidad al especificar los tamaños de fuente, de modo que se ajusten tanto a la densidad de la pantalla como a las preferencias del usuario.
De la comprensión de la independencia de la densidad en Android :
+----------------+----------------+---------------+-------------------------------+
| Density Bucket | Screen Density | Physical Size | Pixel Size |
+----------------+----------------+---------------+-------------------------------+
| ldpi | 120 dpi | 0.5 x 0.5 in | 0.5 in * 120 dpi = 60x60 px |
+----------------+----------------+---------------+-------------------------------+
| mdpi | 160 dpi | 0.5 x 0.5 in | 0.5 in * 160 dpi = 80x80 px |
+----------------+----------------+---------------+-------------------------------+
| hdpi | 240 dpi | 0.5 x 0.5 in | 0.5 in * 240 dpi = 120x120 px |
+----------------+----------------+---------------+-------------------------------+
| xhdpi | 320 dpi | 0.5 x 0.5 in | 0.5 in * 320 dpi = 160x160 px |
+----------------+----------------+---------------+-------------------------------+
| xxhdpi | 480 dpi | 0.5 x 0.5 in | 0.5 in * 480 dpi = 240x240 px |
+----------------+----------------+---------------+-------------------------------+
| xxxhdpi | 640 dpi | 0.5 x 0.5 in | 0.5 in * 640 dpi = 320x320 px |
+----------------+----------------+---------------+-------------------------------+
+---------+-------------+---------------+-------------+--------------------+
| Unit | Description | Units Per | Density | Same Physical Size |
| | | Physical Inch | Independent | On Every Screen |
+---------+-------------+---------------+-------------+--------------------+
| px | Pixels | Varies | No | No |
+---------+-------------+---------------+-------------+--------------------+
| in | Inches | 1 | Yes | Yes |
+---------+-------------+---------------+-------------+--------------------+
| mm | Millimeters | 25.4 | Yes | Yes |
+---------+-------------+---------------+-------------+--------------------+
| pt | Points | 72 | Yes | Yes |
+---------+-------------+---------------+-------------+--------------------+
| dp | Density | ~160 | Yes | No |
| | Independent | | | |
| | Pixels | | | |
+---------+-------------+---------------+-------------+--------------------+
| sp | Scale | ~160 | Yes | No |
| | Independent | | | |
| | Pixels | | | |
+---------+-------------+---------------+-------------+--------------------+
También se puede encontrar más información en la documentación de diseño de Google .
dp
hace no tienen exactamente la misma longitud física. (Aunque está cerca). Vea el comentario de @ Fraggle acerca de la inversión. Lo que esto significa es que 48dp tendrá aproximadamente 8 mm (0.3 pulgadas), pero puede variar hasta 11 mm.
Casi todo lo relacionado con esto y cómo lograr el mejor soporte para múltiples pantallas de diferentes tamaños y densidades está muy bien documentado aquí:
Tamaño de pantalla Tamaño
físico real, medido como la diagonal de la pantalla. Para simplificar, Android agrupa todos los tamaños de pantalla reales en cuatro tamaños generalizados: pequeño, normal, grande y extra grande.Densidad de pantalla
El número de píxeles dentro de un área física de la pantalla; generalmente se conoce como dpi (puntos por pulgada). Por ejemplo, una pantalla de densidad "baja" tiene menos píxeles dentro de un área física dada, en comparación con una pantalla de densidad "normal" o "alta". Para simplificar, Android agrupa todas las densidades de pantalla reales en seis densidades generalizadas: baja, media, alta, extra-alta, extra-extra-alta y extra-extra-extra-alta.Orientación
La orientación de la pantalla desde el punto de vista del usuario. Esto es horizontal o vertical, lo que significa que la relación de aspecto de la pantalla es ancha o alta, respectivamente. Tenga en cuenta que no solo los diferentes dispositivos funcionan en diferentes orientaciones de forma predeterminada, sino que la orientación puede cambiar en tiempo de ejecución cuando el usuario gira el dispositivo.Resolución
El número total de píxeles físicos en una pantalla. Al agregar soporte para múltiples pantallas, las aplicaciones no funcionan directamente con resolución; las aplicaciones solo deben ocuparse del tamaño y la densidad de la pantalla, según lo especificado por los grupos de tamaño y densidad generalizadosPíxel independiente de la densidad (dp)
Una unidad virtual de píxeles que debe usar al definir el diseño de la interfaz de usuario, para expresar las dimensiones o la posición del diseño de una manera independiente de la densidad. El píxel independiente de la densidad es equivalente a un píxel físico en una pantalla de 160 ppp, que es la densidad de referencia asumida por el sistema para una pantalla de densidad "media". En tiempo de ejecución, el sistema maneja de forma transparente cualquier escala de las unidades dp, según sea necesario, en función de la densidad real de la pantalla en uso. La conversión de las unidades de DP a píxeles de la pantalla es simple:px = dp * (dpi / 160)
. Por ejemplo, en una pantalla de 240 ppp, 1 dp equivale a 1,5 píxeles físicos. Siempre debe usar unidades dp al definir la interfaz de usuario de su aplicación, para garantizar la visualización adecuada de su interfaz de usuario en pantallas con diferentes densidades.
Si realmente quiere desarrollar una aplicación de Android para más de un tipo de dispositivo, debería haber leído el documento de desarrollo de soporte de pantallas al menos una vez. Además de eso, siempre es bueno saber la cantidad real de dispositivos activos que tienen una configuración de pantalla particular.
Explicaré más sobre cómo exactamente se convierte dp a px:
150 x 150 px
imagen ocupará 150 * 150 dp
espacio en la pantalla.150 x 150 px
imagen ocupará 100 * 100 dp
espacio en la pantalla.150x150 px
imagen ocupará 75 * 75 dp
espacio en la pantalla.Al revés: por ejemplo, desea agregar una imagen a su aplicación y la necesita para llenar un 100 * 100 dp
control. Deberá crear imágenes de diferentes tamaños para los tamaños de pantalla admitidos:
100 * 100 px
imagen para mdpi150 * 150 px
imagen para hdpi200 * 200 px
imagen para xhdpipx - Píxeles : el punto por escala corresponde a los píxeles reales en la pantalla.
i - Pulgadas - según el tamaño físico de la pantalla.
mm - Milímetros - según el tamaño físico de la pantalla.
pt - Puntos : 1/72 de pulgada según el tamaño físico de la pantalla.
dp: píxeles independientes de la densidad : una unidad abstracta que se basa en la densidad física de la pantalla. Estas unidades son relativas a una pantalla de 160 ppp, por lo que uno dp
es un píxel en una pantalla de 160 ppp. La relación de dp a píxel cambiará con la densidad de la pantalla, pero no necesariamente en proporción directa. Nota: El compilador acepta ambos dip
y dp
, aunque dp
es más coherente con sp
.
sp - Píxeles independientes de la escala : es como la dp
unidad, pero también se escala según la preferencia de tamaño de fuente del usuario. Se recomienda que utilice esta unidad cuando especifique tamaños de fuente, de modo que se ajusten tanto a la densidad de la pantalla como a las preferencias del usuario.
Tome el ejemplo de dos pantallas que son del mismo tamaño pero una tiene una densidad de pantalla de 160 ppp (puntos por pulgada, es decir, píxeles por pulgada) y la otra es de 240 ppp.
Lower resolution screen Higher resolution, same size
Physical Width 1.5 inches 1.5 inches
Dots Per Inch (“dpi”) 160 240
Pixels (=width*dpi) 240 360
Density (factor of baseline 160) 1.0 1.5
Density-independent pixels 240 240
(“dip” or “dp” or “dps”)
Scale-independent pixels
(“sip” or “sp”) Depends on user font size settings same
Además, debe tener una comprensión clara sobre los siguientes conceptos:
Tamaño de pantalla:
Tamaño físico real, medido como la diagonal de la pantalla. Para simplificar, Android agrupa todos los tamaños de pantalla reales en cuatro tamaños generalizados: pequeño, normal, grande y extra grande.
Densidad de pantalla:
La cantidad de píxeles dentro de un área física de la pantalla; generalmente se conoce como dpi (puntos por pulgada). Por ejemplo, una pantalla de densidad "baja" tiene menos píxeles dentro de un área física dada, en comparación con una pantalla de densidad "normal" o "alta". Para simplificar, Android agrupa todas las densidades de pantalla reales en cuatro densidades generalizadas: baja, media, alta y extra alta.
Orientación:
La orientación de la pantalla desde el punto de vista del usuario. Esto es horizontal o vertical, lo que significa que la relación de aspecto de la pantalla es ancha o alta, respectivamente. Tenga en cuenta que los diferentes dispositivos no solo funcionan en diferentes orientaciones de manera predeterminada, sino que la orientación puede cambiar en tiempo de ejecución cuando el usuario gira el dispositivo.
Resolución:
El número total de píxeles físicos en una pantalla. Al agregar soporte para múltiples pantallas, las aplicaciones no funcionan directamente con resolución; las aplicaciones solo deben ocuparse del tamaño y la densidad de la pantalla, según lo especificado por los grupos de tamaño y densidad generalizados.
Píxel independiente de la densidad (dp):
Una unidad virtual de píxeles que debe usar al definir el diseño de la interfaz de usuario, para expresar las dimensiones o la posición del diseño de una manera independiente de la densidad. El píxel independiente de la densidad es equivalente a un píxel físico en una pantalla de 160 ppp, que es la densidad de referencia asumida por el sistema para una pantalla de densidad "media". En tiempo de ejecución, el sistema maneja de manera transparente cualquier escala de las unidades dp, según sea necesario, en función de la densidad real de la pantalla en uso. La conversión de unidades dp a píxeles de pantalla es simple: px = dp * (dpi / 160). Por ejemplo, en una pantalla de 240 ppp, 1 dp equivale a 1,5 píxeles físicos. Siempre debe usar unidades dp al definir la interfaz de usuario de su aplicación, para garantizar la visualización adecuada de su interfaz de usuario en pantallas con diferentes densidades.
Referencia: sitio de desarrolladores de Android
dp
es dip
. Úselo para todo (margen, relleno, etc.).
Úselo solo sp
para {text-size}.
Ver la diferencia entre px
, dp
y sp
en diferentes tamaños de pantalla.
px o dot es un píxel en la pantalla física.
dpi son píxeles por pulgada en la pantalla física y representan la densidad de la pantalla.
Android da nombres de alias a varias densidades
dip o dp son píxeles independientes de densidad , es decir, corresponden a más o menos píxeles dependiendo de la densidad física.
sp o sip es un píxel independiente de la escala . Se escalan cuando la opción Texto grande está activada en Settings>Accessibility
Use sp para el tamaño del texto.
Usa dp para todo lo demás.
Fuente 3 : (los datos de la fuente 3 se proporcionan a continuación)
Estos son valores de dimensión definidos en XML. Una dimensión se especifica con un número seguido de una unidad de medida. Por ejemplo: 10px, 2in, 5sp. Las siguientes unidades de medida son compatibles con Android:
dp
Píxeles independientes de la densidad: una unidad abstracta que se basa en la densidad física de la pantalla. Estas unidades son relativas a una pantalla de 160 ppp (puntos por pulgada), en la que 1dp es aproximadamente igual a 1px. Cuando se ejecuta en una pantalla de mayor densidad, el número de píxeles utilizados para dibujar 1dp se amplía en un factor apropiado para el dpi de la pantalla. Del mismo modo, cuando se encuentra en una pantalla de menor densidad, la cantidad de píxeles utilizados para 1dp se reduce. La relación de dp a píxel cambiará con la densidad de la pantalla, pero no necesariamente en proporción directa. Usar unidades dp (en lugar de unidades px) es una solución simple para hacer que las dimensiones de la vista en su diseño cambien de tamaño correctamente para diferentes densidades de pantalla. En otras palabras, proporciona consistencia para los tamaños del mundo real de los elementos de la interfaz de usuario en diferentes dispositivos.
sp
Píxeles independientes de la escala: es como la unidad dp, pero también se escala según la preferencia de tamaño de fuente del usuario. Se recomienda que utilice esta unidad cuando especifique tamaños de fuente, para que se ajusten tanto a la densidad de la pantalla como a las preferencias del usuario.
pt
Puntos: 1/72 de pulgada según el tamaño físico de la pantalla.
px
Píxeles: corresponde a los píxeles reales en la pantalla. Esta unidad de medida no se recomienda porque la representación real puede variar entre dispositivos; Cada dispositivo puede tener un número diferente de píxeles por pulgada y puede tener más o menos píxeles totales disponibles en la pantalla.
mm
Milímetros: según el tamaño físico de la pantalla.
en
Pulgadas: según el tamaño físico de la pantalla.
Nota: Una dimensión es un recurso simple al que se hace referencia utilizando el valor proporcionado en el atributo de nombre (no el nombre del archivo XML). Como tal, puede combinar recursos de dimensión con otros recursos simples en un archivo XML, bajo un elemento.
Básicamente, el único momento en que se aplica px es un px, y eso es si quieres exactamente un píxel en la pantalla como en el caso de un divisor:
En> 160 ppp, puede obtener 2-3 píxeles,
En> 120 ppp, se redondea a 0.
px
Píxeles: corresponde a los píxeles reales en la pantalla.
dp o dip
Píxeles independientes de la densidad: una unidad abstracta que se basa en la densidad física de la pantalla. Estas unidades son relativas a una pantalla de 160 ppp, por lo que un dp es un píxel en una pantalla de 160 ppp.
Uso de dp:
Independencia de la densidad : su aplicación logra la "independencia de la densidad" cuando conserva el tamaño físico (desde el punto de vista del usuario) de los elementos de la interfaz de usuario cuando se muestra en pantallas con diferentes densidades. (es decir) La imagen debe verse del mismo tamaño (no ampliada o contraída) en diferentes tipos de pantallas.
sp
Píxeles independientes de la escala: es como la unidad dp, pero también se escala según la preferencia de tamaño de fuente del usuario.
http://developer.android.com/guide/topics/resources/more-resources.html#Dimension
Una unidad virtual de píxeles que debe usar al definir el diseño de la interfaz de usuario, para expresar las dimensiones o la posición del diseño de una manera independiente de la densidad. Como se describió anteriormente, el píxel independiente de la densidad es equivalente a un píxel físico en una pantalla de 160 ppp, que es la densidad de referencia asumida por el sistema para una pantalla de densidad "media". En tiempo de ejecución, el sistema maneja de manera transparente cualquier escala de las unidades dp, según sea necesario, en función de la densidad real de la pantalla en uso. La conversión de unidades dp a píxeles de pantalla es simple:
px = dp * (ppp / 160).
Por ejemplo, en una pantalla de 240 ppp, 1 dp equivale a 1,5 píxeles físicos. Siempre debe usar unidades dp al definir la interfaz de usuario de su aplicación, para garantizar la visualización adecuada de su interfaz de usuario en pantallas con diferentes densidades.
Comprender píxel a dp y viceversa es muy esencial (especialmente para dar valores dp exactos al equipo creativo)
dp = px * 160 / dpi
MDPI = 160 dpi || Therefore, on MDPI 1 px = 1 dp
For example, if you want to convert 20 pixel to dp, use the above formula,
dp = 20 * 160 / 160 = 20.
So, 20 pixel = 20 dp.
HDPI = 240 dpi - So, on HDPI 1.5 px = 1 dp
XHDPI = 320 dpi - So, on XHDPI 2 px = 1 dp
XXHDPI = 480 dpi - So, on XXHDPI 3 px = 1 dp
For example, let us consider Nexus 4.
If 24 pixels to be converted to dp and if it is a Nexus 4 screen, developers can
convert it to dp easily by the following calculation :
dp = 24 * 160 / 320 = 12 dp
Screen dimension:
768 x 1280 pixel resolution (320 ppi or 320dpi)
Optional (screen size):
4.7" diagonal
Se explica arriba. Intenta evitar en los archivos de diseño. Pero hay algunos casos en los que se requiere px. por ejemplo, la línea divisoria ListView. px es mejor aquí para dar una línea de un píxel como divisor para todas las resoluciones de pantalla.
Use sp para tamaños de fuente. Entonces, solo la fuente dentro de la aplicación cambiará mientras cambie el tamaño de las fuentes del dispositivo (es decir, Pantalla -> Fuentes en el dispositivo). Si desea mantener una fuente de tamaño estático dentro de la aplicación, puede dar la dimensión de la fuente en dp. En tal caso, nunca cambiará. Los desarrolladores pueden obtener dicho requisito para algunas pantallas específicas, para eso, los desarrolladores pueden usar dp en lugar de sp. En todos los demás casos, se recomienda sp.
Puede ver la diferencia entre px
y dp
de la imagen a continuación, y también puede encontrar que px
y dp
no puede garantizar los mismos tamaños físicos en las diferentes pantallas.
Cualquier cosa relacionada con el tamaño del texto y la apariencia debe usar sp
o pt
. Mientras que, cualquier cosa relacionada con el tamaño de los controles, los diseños, etc. debe usarse con dp
.
Puedes usar ambos dp
y dip
en sus lugares.
Solo usaría dp.
Se habla mucho sobre el uso de "sp" para los tamaños de fuente, y aunque aprecio el punto, no creo que sea lo correcto desde el punto de vista del diseño. Puede terminar rompiendo su diseño si el usuario tiene una selección de tamaño de fuente inestable, y el usuario terminará culpando a la aplicación , y no a sus propias opciones de vida.
Además, si toma una aplicación de fuente sp en una tableta de 160 ppp, encontrará que todo se escala ... pero su fuente, que en comparación se verá pequeña. No es un buen look.
Si bien la idea de las fuentes "sp" tiene buen corazón, es una mala idea. Quédate con dp para todo.
sp
es un factor, ¿verdad? Cualquier cosa que afecte dp
también afectará sp
. Dicho esto, todavía es preferible especificar el tamaño de fuente usando en dp
lugar de sp
si su diseño es muy ajustado y los tamaños más grandes no se ajustan; es mejor tener un texto más pequeño de lo que el usuario quiere que un diseño completamente desordenado. Pero en primera instancia, siempre debe esforzarse por respetar la preferencia de tamaño de fuente del usuario, incluso la configuración más grande no es TAN grande.
sp = píxel independiente de escala
dp = dip = píxeles independientes de densidad
ppp = puntos por pulgada
Debemos evitar usar sp .
Deberíamos usar dp para soportar múltiples pantallas.
Android admite diferentes resoluciones de pantalla
Un dispositivo ldpi de 120 dp tiene 120 píxeles en tamaño de 1 pulgada.
Lo mismo para otras densidades ...
Nosotros, como ingenieros de software, debemos usar esta fórmula de conversión:
píxel = dp * (densidad / 160)
Entonces, 1 dp del dispositivo de 240 ppp tendrá = 1 * (240/160) = 3/2 = 1.5 píxeles.
Y el dispositivo de 480 ppp 1 dp tendrá = 1 * (480/160) = 3 píxeles.
Usando este conocimiento de 1.5 y 3 píxeles, un ingeniero de software puede diseñar diseños para diferentes densidades.
Para verificar los parámetros de pantalla de cualquier dispositivo:
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
Toast.makeText(
this,
"4:" + metrics.heightPixels + "," + metrics.density + ","
+ metrics.densityDpi, Toast.LENGTH_LONG).show();
Diferencia entre dp
y sp
unidades mencionadas como " fuente de la preferencia del usuario tamaño " de las respuestas copiadas de documentación oficial se puede ver en tiempo de ejecución cambiando Settings->Accessibility->Large Text
opción.
Large Text
La opción obliga a que el texto se haga 1.3
más grande.
private static final float LARGE_FONT_SCALE = 1.3f;
Por supuesto, esto podría depender del proveedor, ya que se encuentra en paquetes / aplicaciones / Configuración .
ppp -
px - píxel
pt - puntos
pulgada - con respecto al tamaño físico de la pantalla (1 pulgada = 2.54 cm).
mm- milímetro - con respecto al tamaño físico de la pantalla.
sp: píxel independiente de la escala.
dip -
En estándar, se utilizan dp y sp. sp para el tamaño de fuente y dp para todo lo demás.
Fórmula para la conversión de unidades:
px = dp * (ppp / 160);
Density Bucket -> Screen Display => Physical Size => Pixel Size
ldpi -> 120 dpi => 0.5 x 0.5 in => 0.5 in * 120 dpi = 60x60 px
mdpi -> 160 dpi => 0.5 x 0.5 in => 0.5 in * 160 dpi = 80x80 px
hdpi -> 240 dpi => 0.5 x 0.5 in => 0.5 in * 240 dpi = 120x120 px
xhdpi -> 320 dpi => 0.5 x 0.5 in => 0.5 in * 320 dpi = 160x160 px
xxhdpi -> 480 dpi => 0.5 x 0.5 in => 0.5 in * 480 dpi = 240x240 px
xxxhdpi -> 640 dpi => 0.5 x 0.5 in => 0.5 in * 640 dpi = 320x320 px
Aquí está la fórmula utilizada por Android:
px = dp * (ppp / 160)
Donde dpi es una de las siguientes densidades de pantalla. Para obtener una lista de todas las densidades posibles, vaya aquí
Define las constantes "DENSITY_ *".
Tomado de aquí .
Esto resolverá gran parte de la confusión al traducir entre px y dp, si conoce su dpi de pantalla.
Entonces, supongamos que desea una imagen de 60 dp para una pantalla hdpi, entonces el tamaño físico de píxeles de 60 dp es:
px = 60 * (240 / 160)
Tamaño de pantalla en Android
se agrupan en categorías small
, medium
, large
, extra large
, double-extra
y triple-extra
. La densidad de la pantalla es la cantidad de píxeles dentro de un área (como pulgadas) de la pantalla. Generalmente se mide en puntos por pulgada (ppp). La densidad de la pantalla se agrupa en baja, media, alta y extra alta. La resolución es el número total de píxeles en la pantalla.
Fórmula para la conversión entre unidades
px = dp * (dpi / 160)
dp a px en el dispositivo
El siguiente ejemplo puede ayudar a comprender mejor. La escala se produce en función del tamaño de la cubeta de 120 (ldpi), 160 (mdpi), 240 (hdpi), 320 (xhdpi), 480 (xxhdpi) y 640 (xxxhdpi). La proporción sugerida por Google para el diseño es 3: 4: 6: 8: 12 para ldpi: mdpi: hdpi: xhdpi: xxhdpi
Ocupará una imagen de 150px X 150px,
- 150 dp X 150 dp espacio de pantalla en mdpi
- 100 dp X 100 dp espacio de pantalla en hdpi
- 75 dp X 75 dp espacio de pantalla en xhdpi
Puede usar la siguiente calculadora de DPI para corregir los tamaños de imagen y otras dimensiones cuando desee tener un diseño de interfaz de usuario uniforme en todos los dispositivos Android.
/*
Program output
LDPI: 165.0 X 60.0
MDPI: 220.0 X 80.0
HDPI: 330.0 X 120.0
XHDPI: 440.0 X 160.0
XXHDPI: 660.0 X 240.0
XXXHDPI: 880.0 X 320.0
*/
public class DPICalculator {
private final float LDPI = 120;
private final float MDPI = 160;
private final float HDPI = 240;
private final float XHDPI = 320;
private final float XXHDPI = 480;
private final float XXXHDPI = 640;
private float forDeviceDensity;
private float width;
private float height;
public DPICalculator(float forDeviceDensity, float width, float height){
this.forDeviceDensity = forDeviceDensity;
this.width = width;
this.height = height;
}
public static void main(String... args) {
DPICalculator dpiCalculator = new DPICalculator(240,330,120);
dpiCalculator.calculateDPI();
}
private float getPx(float dp, float value) {
float px = dp * (value / forDeviceDensity );
return px;
}
private void calculateDPI() {
float ldpiW = getPx(LDPI,width);
float ldpiH = getPx(LDPI,height);
float mdpiW = getPx(MDPI,width);
float mdpiH = getPx(MDPI,height);
float hdpiW = getPx(HDPI,width);
float hdpiH = getPx(HDPI,height);
float xdpiW = getPx(XHDPI,width);
float xdpiH = getPx(XHDPI,height);
float xxdpiW = getPx(XXHDPI,width);
float xxdpiH = getPx(XXHDPI,height);
float xxxdpiW = getPx(XXXHDPI,width);
float xxxdpiH = getPx(XXXHDPI,height);
System.out.println("LDPI: " + ldpiW + " X " + ldpiH);
System.out.println("MDPI: " + mdpiW + " X " + mdpiH);
System.out.println("HDPI: " + hdpiW + " X " + hdpiH);
System.out.println("XHDPI: " + xdpiW + " X " + xdpiH);
System.out.println("XXHDPI: " + xxdpiW + " X " + xxdpiH);
System.out.println("XXXHDPI: " + xxxdpiW + " X " + xxxdpiH);
}
}
Más información consulte el siguiente enlace.
http://javapapers.com/android/difference-between-dp-dip-sp-px-in-mm-pt-in-android/
Por favor lea la respuesta del wiki de la comunidad. A continuación se incluye información que se debe considerar además de las respuestas anteriores. La mayoría de los desarrolladores de Android pierden esto mientras desarrollan aplicaciones, así que estoy agregando estos puntos.
sp = píxel independiente de escala
dp = píxeles independientes de densidad
ppp = píxeles de densidad
He revisado las respuestas anteriores ... no las he encontrado exactamente correctas. sp para tamaño de texto, dp para límites de diseño - estándar. Pero sp para el tamaño del texto romperá el diseño si se usa descuidadamente en la mayoría de los dispositivos.
sp toma el tamaño del texto del dispositivo, mientras que dp toma el estándar de densidad del dispositivo (nunca cambia en un dispositivo) Digamos que 100sp el texto puede ocupar el 80% de la pantalla o el 100% de la pantalla dependiendo del tamaño de fuente establecido en el dispositivo
Puede usar sp para límites de diseño también, funcionará :) No hay aplicaciones estándar que usen sp para texto completo
Use sp y dp para el tamaño del texto considerando UX.
Algunas personas usan un tamaño FONT enorme en su teléfono para mayor legibilidad, por lo que darles un texto pequeño y codificado será un problema de UX. Ponga sp para texto cuando sea necesario, pero asegúrese de que no rompa el diseño cuando el usuario cambie su configuración.
Del mismo modo, si tiene una sola aplicación que admite todas las dimensiones, agregar recursos xxxhdpi aumenta mucho el tamaño de la aplicación. Pero ahora los teléfonos xxxhdpi son comunes, por lo que tenemos que incluir activos xxxhdpi al menos para los iconos en la barra lateral, la barra de herramientas y la barra inferior. Es mejor pasar a imágenes vectoriales para tener imágenes uniformes y de mejor calidad para todos los tamaños de pantalla.
También tenga en cuenta que las personas usan fuentes personalizadas en sus teléfonos. Por lo tanto, la falta de una fuente puede causar problemas con respecto al espaciado y todo. Digamos que el tamaño de texto de 12sp para una fuente personalizada puede tomar algunos píxeles adicionales que la fuente predeterminada.
Consulte el sitio de desarrolladores de Google para obtener información sobre densidades de pantalla y de base para Android. https://developer.android.com/training/multiscreen/screendensities
Me he encontrado con un buen artículo sobre el diseño de la interfaz de usuario de aplicaciones de Android para diferentes resoluciones de pantalla, y me gustaría dejarlo aquí solo para alguien que busque en esta área. Sí, sé que de alguna manera se describe en los documentos de Google (y se menciona en las publicaciones anteriores), lo leí, pero no fue bueno para mí (sí, puedo ser demasiado estúpido)). No me quedó claro cómo diseñar diseños capaces de manejar diferentes tamaños de pantalla. Odio el concepto DP y demás, cuando necesito implementar un diseño de interfaz de usuario "flexible" para diferentes pantallas. (Hola desarrolladores de iOS, sí, tienes razón, es el concepto de Storyboard).
Android no tiene un concepto de interfaz de usuario malo, pero desafortunadamente carece de las características de iOS Storyboard. Diseñar una interfaz de usuario flexible en Android no es algo fácil (en el mejor de los casos).
Aquí va el artículo que me ayudó a entender qué hacer en Android para hacer diseños para diferentes tamaños de pantalla:
Blog de JMSTUDIO: - Decide el tamaño de pantalla de la aplicación de Android
Cómo diseñar la interfaz de usuario para aplicaciones de Android para diferentes tamaños de pantalla
Para diseñar una interfaz de usuario de aplicación para diferentes tamaños de pantalla, nuestro diseño inicial debe cumplir con un espacio mínimo requerido para cada tamaño de pantalla. Android define un tamaño mínimo (en dp) para cada tipo de pantalla generalizada. Aquí hay una guía de tamaño de pantalla de Android. Cuando obtenemos el tamaño de la pantalla en dp, no es suficiente para nosotros diseñar la interfaz de usuario de la aplicación de Android. Para cada tamaño de pantalla, necesitamos preparar gráficos e imágenes de mapa de bits para cada densidad. Aquí hay una guía de densidad de pantalla de Android.
Para un cálculo fácil, podemos seguir la relación de escala 3: 4: 6: 8 entre las cuatro densidades generalizadas. Si creamos una imagen de 36 × 36 píxeles para el dispositivo ldpi, el tamaño de las imágenes de las densidades restantes será 48 × 48 para mdpi, 72 × 72 para hdpi y 96 × 96 para xhdpi.
Cómo diseñar la interfaz de usuario de aplicaciones de Android en Photoshop
Muchos diseñadores tienen problemas para diseñar la interfaz de usuario de la aplicación de Android en Photoshop u otras herramientas de diseño gráfico basadas en píxeles debido a la unidad independiente de la densidad, dp. Los diseñadores no saben cómo asignar dp a píxel. Google tampoco ofrece una guía clara de diseño de interfaz de usuario de Android para ellos, aunque ofrecen una fórmula básica para la traducción de píxeles y dp.
Como definición de Android, 1pd equivale a 1px en un dispositivo de 160 ppp (mdpi). Por lo tanto, queremos diseñar una aplicación de Android para dispositivos Android xlarge con densidad mdpi, podemos definir nuestro tamaño de interfaz de usuario en píxeles como 960 píxeles de ancho y 720 píxeles de altura; Siga la misma regla de mapeo, podemos obtener las siguientes pautas de diseño de interfaz de usuario del tamaño de pantalla de la aplicación de Android:
AGREGADO : si también está interesado en la interfaz de usuario "flexible", eche un vistazo a esta biblioteca: un SDK de Android que proporciona una nueva unidad de tamaño: sdp (dp escalable). Esta unidad de tamaño se escala con el tamaño de la pantalla (esto también se menciona en una respuesta aquí, sobre la SDP
biblioteca)
ADDED2 Google finalmente ha comprendido la utilidad del concepto de iOS Storeboard interfaz de usuario, y aquí va ConstraintLayout
para el mundo Android: Construir una interfaz de usuario sensible que proporciona un ConstraintLayout
1) dp: (density independent pixels)
La cantidad de píxeles representados en una unidad de dp aumentará a medida que aumente la resolución de la pantalla (cuando tenga más puntos / píxeles por pulgada). Por el contrario, en dispositivos con una resolución más baja, la cantidad de píxeles representados en la unidad de dp disminuirá. Como se trata de una unidad relativa, debe tener una línea de base con la que se pueda comparar. Esta línea base es una pantalla de 160 ppp. Esta es la ecuación:px = dp * (dpi / 160).
2) sp: (scale independent pixels)
Esta unidad se escala de acuerdo con el dpi de pantalla (similar a dp), así como la preferencia de tamaño de fuente del usuario.
3) px: (pixels)
Píxeles o puntos reales en la pantalla.
Para más detalles puedes visitar
Guía del desarrollador de Android> Dimension
Guía del desarrollador de Android> Pantallas
Tamaño de pantalla en Android se agrupan en categorías ldpi
, mdpi
, hdpi
, xhdpi
, xxhdpi
y xxxhdpi
. La densidad de la pantalla es la cantidad de píxeles dentro de un área (como pulgadas) de la pantalla. Generalmente se mide en puntos por pulgada ( dpi
).
PX(Pixels):
px
está destinado a píxeles absolutos. Esto se usa si desea dar en términos de píxeles absolutos para ancho o alto. No recomendado.DP/DIP(Density pixels / Density independent pixels):
dip == dp
. En versiones anteriores de Android, se usaba dip y luego se cambiaba a dp
. Esta es una alternativa de px
.
En general, nunca usamos px
porque es un valor absoluto. Si usa px
para establecer el ancho o la altura, y si esa aplicación se está descargando en dispositivos de diferentes tamaños de pantalla, esa vista no se extenderá según el tamaño original de la pantalla.
dp
Se recomienda su uso en lugar de px
. Úselo dp
si desea mencionar el ancho y la altura para crecer y reducirse dinámicamente según los tamaños de pantalla.
Si damos dp/dip
, Android calculará automáticamente el tamaño de píxel sobre la base de una pantalla de 160 píxeles.
SP(Scale independent pixels):
escalado en función de la preferencia de tamaño de fuente del usuario. Las fuentes deben usar sp
.
al mencionar los tamaños de fuente que se ajustan a varios tamaños de pantalla, use sp
. Esto es similar adp
.Usar sp
especialmente para que los tamaños de fuente crezcan y se reduzcan dinámicamente según los tamaños de pantalla
La documentación de Android dice:
al especificar dimensiones, use siempre unidades
dp
osp
unidades. Adp
es un píxel independiente de la densidad que corresponde al tamaño físico de un píxel en 160dpi
. Unsp
es la misma unidad base, pero se escala según el tamaño de texto preferido del usuario (es un píxel independiente de la escala), por lo que debe usar esta unidad de medida al definir el tamaño del texto
La pantalla de un teléfono móvil está formada por miles de pequeños puntos conocidos como píxeles (px) . Un píxel es el elemento más pequeño que se utiliza para hacer la imagen. Cuanto mayor sea el número de píxeles para hacer una imagen o texto, más nítida se vuelve y hace que la pantalla del teléfono inteligente sea más fácil de leer.
La resolución de la pantalla se mide en términos de número de píxeles en la pantalla. La resolución de pantalla es una especificación de uso común al comprar un dispositivo, pero en realidad no es tan útil cuando se diseña para Android porque pensar en pantallas en términos de píxeles ignora la noción de tamaño físico, que para un dispositivo táctil es realmente muy importante.
Los píxeles independientes de la densidad (dp o dip) permiten al diseñador crear activos que aparecen de la manera esperada, sin importar la resolución o la densidad del dispositivo objetivo.
Un píxel independiente de densidad (dp o dip) es igual a un píxel en la densidad de referencia o 160 ppp (puntos por pulgada).
1 px / 1dp = 160 ppp / 160 ppp
2 px / 1dp = 320 ppp (2x) / 160 ppp
dónde,
dpi es puntos por pulgada
Entonces, a 320 ppp, 1 dp es igual a 2 px.
Fórmula
px / dp = ppp / 160 ppp
Los puntos por pulgada (ppp) son una medida de la nitidez (es decir, la densidad de los puntos iluminados) en una pantalla de visualización. Los puntos por pulgada para una resolución de imagen dada diferirán en función del tamaño general de la pantalla, ya que la misma cantidad de píxeles se distribuye en un espacio diferente.
Trabajar con píxeles independientes de la densidad nos ayuda a lidiar con una situación en la que tiene dos dispositivos con la misma resolución de píxeles, pero con una cantidad diferente de espacio. Supongamos que, en un caso, una tableta y un teléfono tienen la misma resolución de píxeles 1280 por 800 píxeles (160 ppp) y 800 por 1280 píxeles (320 ppp) respectivamente.
Ahora, debido a que una tableta tiene una densidad de referencia (160 ppp), sus tamaños de píxeles físicos e independientes de densidad son los mismos, 1280 por 800. Por otro lado, el teléfono tiene una mayor densidad de píxeles, por lo que tiene la mitad de píxeles independientes de densidad que físicos. píxeles Entonces, un teléfono tiene 400 por 640 píxeles independientes de densidad. Por lo tanto, usar un píxel independiente de la densidad hace que sea más fácil imaginar mentalmente que la tableta tiene mucho más espacio que el teléfono.
Del mismo modo, si tiene dos dispositivos con un tamaño de pantalla similar, pero con una densidad de píxeles diferente, digamos que uno es de 800 por 1280 píxeles (320 ppp) y el otro es de 400 por 640 píxeles (160 ppp), no necesitamos definir totalmente diferentes diseños para estos dos dispositivos, ya que podemos medir los activos en términos de píxeles independientes de densidad, que es lo mismo para ambos dispositivos.
800 por 1280 píxeles (320 ppp) = 400 por 640 píxeles independientes de densidad (dp)
400 por 640 píxeles (160 ppp) = 400 por 640 píxeles independientes de densidad (dp)
La escala de píxeles independientes (sp) es la unidad preferida para el tamaño de fuente. Para fines de accesibilidad, Android permite a los usuarios personalizar el tamaño de fuente de su dispositivo. Los usuarios que tienen problemas para leer el texto pueden aumentar el tamaño de fuente de su dispositivo. Normalmente puede encontrar esta opción en la configuración de pantalla de su teléfono o tableta en tamaño de fuente. A menudo también está disponible a través de la configuración de accesibilidad.
Con píxeles independientes de escala, 16 sp es exactamente lo mismo que 16 dp cuando el tamaño de fuente del dispositivo es normal o 100%. Pero cuando el tamaño de fuente del dispositivo es grande, por ejemplo 125%, 16 sp se traducirán a 20 dp o 1.25 veces 16.
Si usa dp como la unidad para el tamaño de fuente, entonces ese texto tiene un tamaño físico específico sin importar si el usuario ha personalizado el tamaño de fuente del dispositivo. El uso de unidades sp mejorará la experiencia de las personas con problemas de visión.
Referencia : Udacity , Google
La densidad y la resolución de los píxeles de la pantalla varían según la plataforma. Los píxeles independientes del dispositivo y los píxeles escalables son unidades que proporcionan una forma flexible de acomodar un diseño en todas las plataformas.
El número de píxeles que caben en una pulgada se conoce como densidad de píxeles. Las pantallas de alta densidad tienen más píxeles por pulgada que las de baja densidad ...
El número de píxeles que caben en una pulgada se conoce como densidad de píxeles. Las pantallas de alta densidad tienen más píxeles por pulgada que las de baja densidad. Como resultado, los elementos de la interfaz de usuario de las mismas dimensiones de píxeles aparecen más grandes en pantallas de baja densidad y más pequeños en pantallas de alta densidad.
Para calcular la densidad de la pantalla, puede usar esta ecuación:
Densidad de pantalla = Ancho de pantalla (o altura) en píxeles / Ancho de pantalla (o altura) en pulgadas
La densidad y la resolución de los píxeles de la pantalla varían según la plataforma. Los píxeles independientes del dispositivo y los píxeles escalables son unidades que proporcionan una forma flexible de acomodar un diseño en todas las plataformas.
Cálculo de la densidad de píxeles El número de píxeles que caben en una pulgada se denomina densidad de píxeles . Las pantallas de alta densidad tienen más píxeles por pulgada que las de baja densidad ...
La independencia de densidad se refiere a la visualización uniforme de elementos de la interfaz de usuario en pantallas con diferentes densidades.
Los píxeles independientes de la densidad , escritos como dp (pronunciados " dips "), son unidades flexibles que se escalan para tener dimensiones uniformes en cualquier pantalla. Las interfaces de usuario de materiales utilizan píxeles independientes de la densidad para mostrar elementos de manera consistente en pantallas con diferentes densidades.
Leer el texto completo https://material.io/design/layout/pixel-density.html
Píxeles (px) : corresponde a los píxeles reales en la pantalla. Esto se usa si desea dar en términos de píxeles absolutos para ancho o alto.
Píxeles independientes de la densidad (dp o dip) : una unidad abstracta que se basa en la densidad física de la pantalla. Estas unidades son relativas a una pantalla de 160 ppp, por lo que un dp es un píxel en una pantalla de 160 ppp. La relación de dp a píxel cambiará con la densidad de la pantalla, pero no necesariamente en proporción directa. Nota: El compilador acepta "dip" y "dp", aunque "dp" es más coherente con "sp".
Píxeles independientes de escala (sp) : es como la unidad dp, pero también se escala según la preferencia de tamaño de fuente del usuario. Se recomienda que utilice esta unidad cuando especifique tamaños de fuente, para que se ajusten tanto a la densidad de la pantalla como a las preferencias del usuario.
Utilice siempre dp y sp solamente. sp para tamaños de fuente y dp para todo lo demás. Hará que la interfaz de usuario sea compatible con dispositivos Android con diferentes densidades. Puede obtener más información sobre píxeles y dp en https://www.google.com/design/spec/layout/units-measurements.html#units-measurements-density-independent-pixels-dp-
URL de origen: - http://www.androidtutorialshub.com/what-is-the-difference-between-px-dp-dip-sp-on-android/
Quiero proporcionar una manera fácil de entender dp
. De hecho, creo que dp
es el más fácil de entender. dp
es solo una unidad de longitud física. Es de la misma dimensión que mm
o inch
. Es conveniente para nosotros escribir 50dp
, en 60dp
lugar de 50/160 inch
o 60/160 inch
, porque uno dp
es 1/160 inch
cualquiera sea el tamaño o la resolución de la pantalla.
El único problema es que el dpi de Android de algunas pantallas no es preciso. Por ejemplo, una pantalla clasificada a 160 ppp puede tener 170 ppp de hecho. Entonces, el resultado del cálculo de dp
es difuso. Debería ser aproximadamente lo mismo que 1/160 inch
.