Diferencias entre PX, DP y SP en Android
Una de las grandes dudas que tenemos cuando empezamos a programar en Android, es que no conocemos las unidades de medida dp y sp . Y para crear el diseño de nuestra app correctamente es imprescindible conocer como funciona.
Conceptos
Píxel
Un píxel es un punto que emite un solo color en una imagen o en una pantalla . Si hablamos de fotografía digital, todos conocemos a la perfección a qué nos referimos cuando hablamos de megapíxeles. Una cámara de 12 megapíxeles, puede capturar imágenes compuestas por 12 millones de píxeles, es decir, 12 millones de puntos de color. Cuanto mayor es la cantidad de puntos, o píxeles, mejor calidad tendrá la fotografía que tomamos.
A continuación se muestra una imagen de Alta densidad:
La siguiente figura, en cambio muestra la misma interfaz de usuario en una pantalla de baja densidad, en una pantalla del mismo tamaño, pero con menor número de píxeles:
Densidad de píxeles por pulgada (ppp, en inglés ppi: pixel per inch)
Es la cantidad de píxeles que cabe en una pulgada. Las pantallas de alta densidad tienen más píxeles por pulgada que los de baja densidad. Esto da como resultado que algunos elementos gráficos (como los botones) se vean más grandes en una pantalla de baja densidad y más pequeños en una de alta densidad.
El cálculo de la densidad de píxeles de una pantalla se expresa en la siguiente fórmula:
densidad de pantalla = anchura de pantalla (o altura) en píxeles / anchura de pantalla (o altura) en pulgadas.
Hoy en día, al comprar un teléfono móvil una de las características en la que más se fijan los usuarios es en el tamaño de pantalla (expresado en pulgadas). Así nos encontramos móviles de 4, 5, 6 pulgadas. Dicha información suele venir acompañada de la resolución de la misma, expresada en el número de píxeles (punto de luz) que tiene la pantalla tanto en horizontal como en vertical.
Unidades de medida en Android
Unidades
- px es un pixel.
- dip o dp son píxeles de densidad independiente (density-independent pixels).
- sp son pixels de escala independiente (scaleable pixels).
DP, los pixeles de densidad independiente
Son unidades flexibles que se escalan a dimensiones uniformes en cualquier pantalla. Cuando desarrolle aplicaciones para Android, utilice dp para mostrar los elementos uniformemente en pantallas con diferentes densidades.
Un dp es igual a un pixel en una pantalla de densidad de 160 . Para calcular dp:
dp = (ancho en píxeles * 160) / densidad de la pantalla.
SP, los píxeles de escala independient
Scale-independent-Pixels en inglés, tienen la misma función que los dp , la diferencia es que se aplican a textos, en el caso de Android para TextView o cualquier otro elemento que soporte una fuente.
El valor por defecto de un sp es el mismo que el valor por defecto de un dp . Por ejemplo:
TextView
android:id="@+id/textView"
android:text="Tamaño de texto 25sp (Scale-independent-Pixels)"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="25sp"
La diferencia principal entre un sp y un dp es que el sp preserva los ajustes del usuario respecto a la fuente . Los usuarios que tengan ajustes para agrandar el texto verán que el tamaño del texto concuerda con sus preferencias. Por ello, se recomienda el uso de esta unidad de medida para fuentes.
Escala de imágenes en Android
En Android existe una nomenclatura para categorizar las imágenes en función de la resolución de la pantalla y de la densidad de píxeles:
Screen resolution | dpi | Pixel ratio | Image size (pixels) |
xxxhdpi | 640 | 4.0 | 400 x 400 |
xxhdpi | 480 | 3.0 | 300 x 300 |
xhdpi | 320 | 2.0 | 200 x 200 |
hdpi | 240 | 1.5 | 150 x 150 |
mdpi | 160 | 1.0 | 100 x 100 |
Android dispone de un asistente que a partir de una imagen que queramos utilizar en el proyecto, nos genera la transformación de dicha imagen a las diferentes resoluciones . Este tipo de imágenes de las que hablamos deben ser de uno de estos tipos:
- Launcher icon: imagen utilizada para el logotipo de la aplicación. Es la que se muestra en el Menú de Aplicaciones para acceder a la aplicación.
- Tabs icon.
Conclusión
- dp y dpi es lo mismo y se usa para objetos tipo view (aunque también puede ser usado para texto, no se recomienda).
- sp se utiliza sólo para texto.