2010-12-23 24 views
6

Si, en un archivo xml de diseño, configuré el tamaño para que sea, por ejemplo 12dip. ¿Siempre será 12px en mdpi y por lo tanto 18px en hdpi?Relaciones entre dip, px y dpi

Entonces, ¿siempre se aplica dip para mdpi y se escalará en consecuencia para otras densidades?

Respuesta

11

Esa pregunta está totalmente cubierta por official documentation. Las relaciones entre dip, px y dpi están cubiertas por la sección this.

Cita:

independiente de la densidad de píxeles (dp)

Una unidad de pixel virtual que las aplicaciones pueden utilizar en la definición de su interfaz de usuario , para expresar dimensiones del diseño o posición 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 dpi 160, la densidad de la línea de base asumida por la plataforma (como se describe más adelante en este documento). En tiempo de ejecución, la plataforma maneja de forma transparente cualquier escala de las unidades dp necesarias, basado en en la densidad real de la pantalla en el uso de . La conversión de unidades dp a píxeles de pantalla es simple: píxeles = dps * (densidad/160). Por ejemplo, en una pantalla de 240 ppp, 1 dp equivaldría a 1,5 píxeles físicos. El uso de unidades dp en define que la interfaz de usuario de su aplicación es altamente recomendada, como una forma de garantizar visualización adecuada de su UI en diferentes pantallas .

Así que la declaración:

que estar siempre en 12px 18px MDPI y así en IPAP

parece ser correcta, de acuerdo con los documentos.

+0

Por lo que entiendo, 12px solo será 12px en mdpi si la pantalla es 160dip. mdpi es una amplia gama de dispositivos de resolución media. – CodyBugstein

4

12dp será 12px en un dispositivo con densidad de 160 dpi. Los documentos no dicen que todos los dispositivos mdpi tengan exactamente 160 ppp, por lo que parece que puede encontrar dispositivos mdpi con otras densidades (por ejemplo, 150 o 180 ppp). En esos casos, la relación 1dp = 1px no sería verdadera.

Sólo se puede estar seguro de esta relación:

px = dp * (dpi/160) 

Si un dispositivo tiene una densidad de 320 ppp entonces cada dp corresponde a 2 píxeles, porque es 320/160 2. Yo diría que 2 es el "factor de densidad", pero también es lo que obtienes con getResources().getDisplayMetrics().density, por lo que también se llama "densidad".