android convertir - ¿Cuál es la diferencia entre “px”, “dip”, “dp” y “sp”?




15 Answers

De la documentación del desarrollador de Android :

  1. px
    Píxeles : corresponde a los píxeles reales en la pantalla.

  2. en
    Pulgadas - basado en el tamaño físico de la pantalla.
    1 pulgada = 2.54 centímetros

  3. mm
    Milímetros - basado en el tamaño físico de la pantalla.

  4. pt
    Puntos : 1/72 de pulgada según el tamaño físico de la pantalla.

  5. dp o dip
    Densidad : píxeles independientes: 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 proporción de dp a píxel cambiará con la densidad de la pantalla, pero no necesariamente en proporción directa. Nota: El compilador acepta tanto "dip" como "dp", aunque "dp" es más consistente con "sp".

  6. sp
    Escala : píxeles independientes: esto es como la unidad dp, pero también se escala según la preferencia de tamaño de fuente del usuario. Se recomienda utilizar esta unidad cuando especifique tamaños de fuente, por lo que se ajustarán tanto para la densidad de la pantalla como para las preferencias del usuario.

De entender la independencia de 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      |               |             |                    | 
+---------+-------------+---------------+-------------+--------------------+

Se puede encontrar más información en la documentación de diseño de Google .

Para calcular las dimensiones en un dispositivo real se puede utilizar this aplicación.

pt que

¿Cuál es la diferencia entre las unidades de medida de Android?

  • px
  • inmersión
  • dp
  • sp



Voy a elaborar más sobre cómo exactamente convertir dp a px:

  • Si se ejecuta en un dispositivo mdpi, una imagen de 150 x 150 px ocupará 150 * 150 dp de espacio de la pantalla.
  • Si se ejecuta en un dispositivo hdpi, una imagen de 150 x 150 px ocupará 100 * 100 dp de espacio de la pantalla.
  • Si se ejecuta en un dispositivo xhdpi, una imagen de 150x150 px ocupará 75 * 75 dp de espacio de la pantalla.

A la inversa: digamos, desea agregar una imagen a su aplicación y la necesita para completar un control de 100 * 100 dp . Tendrá que crear imágenes de diferentes tamaños para tamaños de pantalla compatibles:

  • Imagen de 100 * 100 px para mdpi
  • 150 * 150 px imagen para hdpi
  • 200 * 200 px imagen para xhdpi



Además, debe tener una comprensión clara sobre los siguientes conceptos:

Tamaño de pantalla:

Tamaño físico real, medido según 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 referido como dpi (puntos por pulgada). Por ejemplo, una pantalla de densidad "baja" tiene menos píxeles dentro de un área física determinada, 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 no solo los diferentes dispositivos operan en diferentes orientaciones de manera predeterminada, sino que la orientación puede cambiar en el 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 deben ocuparse únicamente del tamaño y la densidad de la pantalla, como lo especifican los grupos de tamaño y densidad generalizados.

Pixel independiente de densidad (dp):

Una unidad de píxeles virtual que debe utilizar al definir el diseño de la interfaz de usuario, para expresar las dimensiones o la posición del diseño de forma 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 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 una visualización adecuada de su interfaz de usuario en pantallas con diferentes densidades.

Referencia: sitio de desarrolladores de Android.




He calculado la siguiente fórmula para hacer las conversiones dpi a dp y sp




Fuente 1

Fuente 2

Fuente 3 : (los datos de la fuente 3 se dan 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, la cantidad de píxeles utilizados para dibujar 1dp se escala según un factor apropiado para los ppp 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 proporción de dp a píxel cambiará con la densidad de la pantalla, pero no necesariamente en proporción directa. El uso de 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 reales de sus elementos de UI en diferentes dispositivos.

sp

Píxeles independientes de la escala: esto es como la unidad dp, pero también se escala según la preferencia de tamaño de fuente del usuario. Se recomienda utilizar esta unidad cuando especifique tamaños de fuente, por lo que se ajustarán tanto para la densidad de la pantalla como para 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 los 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 - Basado en el tamaño físico de la pantalla.

en

Pulgadas - Basado en 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 el único archivo XML, bajo un elemento.




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 densidad : su aplicación logra la "independencia de 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 tener el mismo tamaño (no se amplía ni se reduce) en diferentes tipos de pantallas.

sp

Píxeles independientes de la escala: esto 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




Puede ver la diferencia entre px y dp en la imagen de abajo, y también puede encontrar que px y dp no pueden garantizar los mismos tamaños físicos en las diferentes pantallas.




Sólo 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 alguna selección de tamaño de fuente novedosa, y el usuario terminará culpando a la aplicación , y no a sus propias opciones de vida.

Además, si tomas una aplicación de fuente sp en una tableta de 160 ppp, verás que todo se amplía ... pero tu fuente, que se verá pequeña en comparación. No es una buena mirada.

Si bien la idea de las fuentes "sp" tiene un buen corazón, es una mala idea. Quédate con dp para todo.




La diferencia entre las unidades dp y sp mencionadas como " preferencia de tamaño de fuente del usuario " por las respuestas copiadas de la documentación oficial se puede ver en el tiempo de ejecución cambiando la opción Settings->Accessibility->Large Text .

Large Text opción Large Text que el texto sea 1.3 veces más grande.

private static final float LARGE_FONT_SCALE = 1.3f;

Por supuesto, esto puede depender del proveedor, ya que se encuentra en packages/apps/Settings .




  • px: un píxel, igual a lo que se usa en CSS, JavaScript, etc.
  • sp - píxeles independientes de la escala
  • dip - píxeles independientes de la densidad

Normalmente sp se usa para tamaños de fuente, mientras que dip se usa (también llamado dp) para otros.




El tamaño de la pantalla en Android se agrupa 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 (dpi). La densidad de la pantalla se agrupa como baja, media, alta y extra alta. La resolución es el número total de píxeles en la pantalla.

  • dp: Densidad de píxeles independientes, varía según la densidad de la pantalla. En pantalla de 160 dpi, 1 dp = 1 pixel. Excepto por el tamaño de fuente, use dp siempre.
  • dip: dip == dp. En versiones anteriores de Android se utilizó dip y luego se cambió a dp.
  • sp: Escala independiente de píxeles, escalada según la preferencia de tamaño de fuente del usuario. Las fuentes deben usar sp.
  • px: nuestro píxel estándar habitual que se asigna al píxel de la pantalla.
  • en: pulgadas, con respecto al tamaño físico de la pantalla.
  • mm: milímetros, respecto al tamaño físico de la pantalla.
  • Pto: 1/72 de pulgada, con respecto al tamaño físico de la pantalla.

Fórmula para la conversión entre unidades

 px = dp * (dpi / 160)

dp a px en dispositivo

El siguiente ejemplo puede ayudar a entender mejor. La escala se produce según el 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

Una imagen de 150px X 150px ocupará,

  • Espacio de pantalla de 150 dp x 150 dp en mdpi
  • Espacio de pantalla de 100 dp x 100 dp en hdpi
  • Espacio de pantalla de 75 dp x 75 dp en xhdpi

Puede usar la siguiente calculadora de DPI para corregir el tamaño de sus imágenes y otras dimensiones cuando desee tener un diseño de interfaz de usuario uniforme en todos los dispositivos Android.

Calculadora DPI en Java

/*
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/




Me he encontrado con un buen artículo sobre el diseño de la interfaz de usuario de las aplicaciones de Android para diferentes resoluciones de pantalla, y me gustaría dejarlo aquí solo para alguien que esté buscando en esta área. Sí, sé que está descrito de alguna manera en los documentos de Google (y mencionado en las publicaciones anteriores), lo leí pero no fue bueno para mí (sí, puede que sea demasiado estúpido). No me quedó claro cómo diseñar diseños capaces de manejar diferentes tamaños de pantalla. Odio el concepto de DP, etc., 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 mal concepto de interfaz de usuario, pero carece de características de iOS Storyboard, desafortunadamente. Diseñar una interfaz de usuario flexible en Android no es fácil (en el mejor de los casos).

Aquí está 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 la pantalla de la aplicación 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 el 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 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 densidades de descanso será de 48 × 48 para mdpi, 72 × 72 para hdpi y 96 × 96 para xhdpi.

Cómo diseñar aplicaciones de Android UI en Photoshop

Muchos diseñadores tienen problemas para diseñar la interfaz de usuario de la aplicación Android en Photoshop u otras herramientas de diseño gráfico basadas en píxeles debido a la unidad independiente de densidad, dp. Los diseñadores no saben cómo asignar dp a pixel. Google tampoco ofrece una guía clara de diseño de la interfaz de usuario de Android para ellos, aunque ofrecen una fórmula básica para la traducción de dp y píxeles.

Según la definición de Android, 1pd es igual a 1px en un dispositivo de 160 ppp (mdpi). Así que 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 px de altura; Siga la misma regla de mapeo, podemos obtener las siguientes pautas de diseño de la interfaz de usuario del tamaño de la pantalla de la aplicación Android:

AÑADIDO : 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í, acerca de la SDPbiblioteca)

ADDED2 Google finalmente ha entendido la utilidad del concepto de interfaz de usuario de iOS Storeboard, y aquí va ConstraintLayoutpara el mundo Android: crear una interfaz de usuario receptiva con 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). A la inversa, en dispositivos con resolución más baja, la cantidad de píxeles representados en una unidad de dp disminuirá. Dado que esta es una unidad relativa, debe tener una línea de base con la que se pueda comparar. Esta línea de base es una pantalla de 160 dpi. Esta es la ecuación:px = dp * (dpi / 160).


2) sp: (scale independent pixels)

Esta unidad se escala según la ppp de la pantalla (similar a dp), así como la preferencia de tamaño de fuente del usuario.


3) px: (pixels)

Píxeles reales o puntos en la pantalla.


Para más detalles puedes visitar.

Guía del desarrollador de Android> Dimension
Guía del desarrollador de Android> Pantallas




sp: escala pixel independiente

Debe usarlo con textos porque se escala automáticamente de acuerdo con el tamaño de fuente que está utilizando el usuario en su dispositivo.

px: elemento de imagen o píxel es el único punto en la pantalla




Antes de responder a esta pregunta, permítame disminuir primero la cantidad de unidades. Así que aquí tienes: dp o dip son los mismos y se conocen como píxeles independientes de la densidad .

1. px - significa píxeles. Los píxeles son un solo punto, punto en una pantalla. Generalmente en la industria móvil se mide en ppi (píxeles por pulgada). La resolución de la pantalla es directamente proporcional a ppi, cuanto mayor sea el número de píxeles por pulgada, mayor será la resolución de la pantalla.

Por ejemplo, si dibuja una imagen de un tamaño de 200 px * 200 px , su aspecto debe ser diferente en un dispositivo de alta resolución en comparación con un dispositivo de baja resolución. El motivo es que una imagen de 200 px en un teléfono de baja resolución tendrá un aspecto más grande que en un dispositivo de alta resolución.

Las imágenes de abajo muestran una resolución de la misma imagen en diferentes teléfonos:

  • Teléfono con alta resolución de pantalla.

  • Teléfono con baja resolución de pantalla.

2. dip o dp : una unidad abstracta que se basa en la densidad física de la pantalla. Estas unidades son relativas a una pantalla de 160 dpi, por lo que un dp es un píxel en una pantalla de 160 dpi La proporción de dp a píxel cambiará con la densidad de la pantalla, pero no necesariamente en proporción directa. La "independencia de densidad" se refiere a la visualización uniforme de los elementos de la interfaz de usuario en pantallas con diferentes densidades.

  • Imagen que muestra 80px (imagen del lado izquierdo) y 80 dp (imagen del lado derecho) . Diferencia de salida.

Un dp es igual a un píxel físico en una pantalla con una densidad de 160 . Para calcular dp:

dp = (ancho en píxeles * 160) / densidad de la pantalla

3. sp - significa píxeles escalables. Generalmente sp se usa para textos en la interfaz de usuario y sp conserva la configuración de fuente. Por ejemplo, si un usuario selecciona una fuente más grande que 30 sp , se escalará automáticamente para que aparezca grande según la preferencia del usuario.




Related

android android-layout user-interface dimension units-of-measurement