[android] ¿Cuál es la diferencia entre "px", "dip", "dp" y "sp"?


Answers

Casi todo sobre esto y cómo lograr el mejor soporte para pantallas múltiples con 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
La cantidad de píxeles dentro de un área física de la pantalla; generalmente conocido como dpi (puntos por pulgada). Por ejemplo, una pantalla de "baja densidad" 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 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 operan en diferentes orientaciones por defecto, sino que la orientación puede cambiar en tiempo de ejecución cuando el usuario gira el dispositivo.

Resolución
La cantidad total de píxeles físicos en una pantalla. Al agregar soporte para pantallas múltiples, las aplicaciones no funcionan directamente con la resolución; las aplicaciones deberían preocuparse únicamente por el tamaño y la densidad de la pantalla, tal como lo especifican los grupos de tamaño y densidad generalizados.

Píxel independiente de la densidad (dp)
Una unidad de píxel virtual que debe usar al definir el diseño de UI, para expresar las dimensiones de diseño o la 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 de 160 ppp, que es la densidad base asumida por el sistema para una pantalla de densidad "media". En tiempo de ejecución, el sistema maneja de forma transparente cualquier escalado 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 cuando defina la IU de su aplicación para garantizar una visualización adecuada de su IU en pantallas con diferentes densidades.

Si es serio sobre el desarrollo de una aplicación de Android para más de un tipo de dispositivo, debería haber leído las pantallas que admiten el documento de desarrollo 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 en particular.

Question

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

  • px
  • inmersión
  • dp
  • sp



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.




dp es dip . Úselo para todo (margen, relleno, etc.).

Use sp para {text-size} solamente.

Para obtener el mismo tamaño en diferentes densidades de pantalla, Android traduce estas unidades en píxeles en tiempo de ejecución, por lo que no hay matemática complicada para que hagas.

Vea la diferencia entre px , dp y sp en diferentes tamaños de pantalla.

Fuente: Programación de Android: The Big Nerd Ranch Guide




Before answering this question let me decrease the number of units first. So here you go: dp or dip are both the same and are known as Density-independent pixels .

1. px - stands for pixels. Pixels are a single dot, point on a screen. Generally in the mobile industry it is measured in ppi (pixels per inch). Screen resolution is directly proportional to ppi, the larger the number of pixels per inch the higher the screen resolution.

For example, if you draw an image of a size 200 px * 200 px , then its appearance must be different on a high-resolution device versus a low-resolution device. The reason is a 200 px image on a low-resolution phone will be look larger than on a high-resolution device.

Below images are showing a resolution of the same image on different phones -

  • Phone with High screen resolution

  • Phone with Low screen resolution

2. dip or dp - an abstract unit that is based on the physical density of the screen. These units are relative to a 160 dpi screen, so one dp is one pixel on a 160 dpi screen. The ratio of dp-to-pixel will change with the screen density, but not necessarily in direct proportion. "Density independence" refers to the uniform display of UI elements on screens with different densities.

  • Image which is showing 80px (left side image) and 80 dp (right-side image) . Checkout difference.

A dp is equal to one physical pixel on a screen with a density of 160 . To calculate dp:

dp = (width in pixels * 160) / screen density

3. sp - stands for scalable pixels. Generally sp is used for texts on the UI, and sp preserves the font settings. For example, if a user selected a larger font than 30 sp it will auto scale to appear large according to a user preference.




sp = scale independent pixel

dp = density independent pixels

dpi = density pixels

I have gone through the above answers...not finding them exactly correct. sp for text size, dp for layout bounds - standard. But sp for text size will break the layout if used carelessly in most of the devices.

sp take the textsize of the device, whereas dp take that of device density standard( never change in a device) Say 100sp text can occupies 80% of screen or 100% of screen depending on the font size set in device

You can use sp for layout bounds also, it will work :) No standard app use sp for whole text

Use sp and dp for text size considering UX.

  • Dont use sp for text in toolbar( can use android dimens available or dp)
  • Dont use sp for text in small bounded buttons, very smaller text, etc

Some people use huge FONT in their phone for more readability, giving them small hardcoded sized text will be an UX issue. Put sp for text where necessary, but make sure it won't break the layout.




Aquí está la fórmula utilizada por Android:

px = dp * (dpi / 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_ *".

  • ldpi (bajo) ~ 120dpi
  • mdpi (medio) ~ 160 dpi
  • hdpi (alto) ~ 240dpi
  • xhdpi (extra-alto) ~ 320 dpi
  • xxhdpi (extra-extra-alto) ~ 480dpi
  • xxxhdpi (extra extra extra extra) ~ 640 ppp

Tomado de aquí .

Esto resolverá una gran confusión al traducir entre px y dp, si conoce los ppp de su pantalla.

Entonces, digamos que quieres una imagen de 60 dp para una pantalla hdpi, entonces el tamaño de píxel físico de 60 dp es:

px = 60 * (240 / 160)



dpi -

  • Puntos por pulgadas
  • Medición de la densidad de píxeles de la pantalla.

px - píxel

  • Para asignar píxeles de pantalla

pt - puntos

  • Aproximadamente 1/72 de pulgada, con respecto al tamaño de la pantalla física.

pulgada - con respecto al tamaño de la pantalla física (1 pulgada = 2.54 cm).

mm- milímetro - con respecto al tamaño de la pantalla física.

sp - pixel independiente de la escala.

  • En función de la preferencia de tamaño de fuente del usuario.
  • La fuente debe estar en 'sp'.

sumergir

  • dip == dp
  • Píxel independiente de densidad
  • Varía según la densidad de la pantalla.
  • En una pantalla de 160 dpi, 1 dp = 1 pixel.
  • Use dp excepto el tamaño de letra del texto.

En estándar, se usan dp y sp. sp para tamaño de fuente y dp para todo lo demás.

Fórmula para la conversión de unidades:

px = dp * (dpi / 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  



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 tiempo de ejecución al cambiar Settings->Accessibility->Large Text opción Settings->Accessibility->Large Text .

Large Text opción Large Text fuerza que el texto se vuelva 1.3 veces más grande.

private static final float LARGE_FONT_SCALE = 1.3f;

Esto puede ser, por supuesto, dependiente del proveedor, ya que se encuentra en packages/apps/Settings .




Screen size in Android is grouped into categories ldpi , mdpi , hdpi , xhdpi , xxhdpi and xxxhdpi . Screen density is the amount of pixels within an area (like inch) of the screen. Generally it is measured in dots-per-inch ( dpi ).

PX(Pixels):

  • our usual standard pixel which maps to the screen pixel. px is meant for absolute pixels. This is used if you want to give in terms of absolute pixels for width or height. No recomendado.

DP/DIP(Density pixels / Density independent pixels):

  • dip == dp . In earlier Android versions dip was used and later changed to dp . This is alternative of px .

  • Generally we never use px because it is absolute value. If you use px to set width or height, and if that application is being downloaded into different screen sized devices, then that view will not stretch as per the screen original size.

  • dp is highly recommended to use in place of px . Use dp if you want to mention width and height to grow & shrink dynamically based on screen sizes.

  • if we give dp/dip , android will automatically calculate the pixel size on the basis of 160 pixel sized screen.

SP(Scale independent pixels):

  • scaled based on user's font size preference. Fonts should use sp .

  • when mentioning the font sizes to fit for various screen sizes, use sp . This is similar to dp .Use sp especially for font sizes to grow & shrink dynamically based on screen sizes

Android Documentation says:

when specifying dimensions, always use either dp or sp units. A dp is a density-independent pixel that corresponds to the physical size of a pixel at 160 dpi . An sp is the same base unit, but is scaled by the user's preferred text size (it's a scale-independent pixel), so you should use this measurement unit when defining text size




SDP - a scalable size unit - basically it is not a unit, but dimension resources for different screen size.

Try the sdp library from Intuit. It's very handy to solve unit problems, and you can quickly support multiple screens .

Uso

android:paddingBottom="@dimen/_15sdp" for positive and android:layout_marginTop="@dimen/_minus10sdp" for negative sdp sdp

It has equivalent value in dp for each size in values-sw<N>dp folders (sw = smallestWidth).

Atención

Use it carefully! In most cases you still need to design a different layout for tablets.

Ejemplo

<LinearLayout
          android:layout_width="wrap_content"
          android:layout_height="wrap_content"
          android:layout_marginTop="@dimen/_minus10sdp"
          android:paddingBottom="@dimen/_15sdp"
          android:orientation="horizontal" >

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:includeFontPadding="false"
                    android:text="♡"
                    android:textColor="#ED6C27"
                    android:textSize="@dimen/_70sdp"
                    android:textStyle="bold" />

                <TextView
                    android:layout_width="wrap_content"
                    android:layout_height="wrap_content"
                    android:includeFontPadding="false"
                    android:text="U"
                    android:textColor="@android:color/black"
                    android:textSize="@dimen/_70sdp" />
            </LinearLayout>

You can use db for text size, but I prefer ssp for text size.

For more details, check the library GitHub page .




px píxeles : el punto por escala corresponde a los píxeles reales en la pantalla.

en pulgadas , según el tamaño físico de la pantalla.

mm. milímetros : según el tamaño físico de la pantalla.

Puntos pt : 1/72 de pulgada en función del tamaño físico de la pantalla.

dp Density - 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 una 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 tanto dip y dp , aunque dp es más consistente con sp .

sp Píxeles independientes de 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 se especifiquen los tamaños de fuente, para que se ajusten tanto para la densidad de la pantalla como para las preferencias del usuario.

Tomemos 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



¿Dónde usar qué y relación entre px y dp?

Píxel independiente de la densidad (dp)

Una unidad de píxel virtual que debe usar al definir el diseño de UI, para expresar las dimensiones de diseño o la posición 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 base asumida por el sistema para una pantalla de densidad "media". En tiempo de ejecución, el sistema maneja de forma transparente cualquier escalado 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 cuando defina la IU de su aplicación para garantizar una visualización adecuada de su IU en pantallas con diferentes densidades.

Entender píxel a dp y viceversa es muy esencial (especialmente para dar valores exactos de dp 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
  • Intente obtener todos los valores de píxel en números pares del equipo creativo. De lo contrario, ocurrirá una pérdida de precisión al multiplicarse por 0.5.

px

Se explica arriba. Intenta evitar en los archivos de diseño. Pero hay algunos casos, donde se requiere px. por ejemplo, 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.

sp

Use sp para los tamaños de letra. Entonces, solo cambiará la fuente dentro de la aplicación mientras cambia 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 darle la dimensión de fuente en dp. En tal caso, nunca cambiará. Los desarrolladores pueden obtener tal 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.




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 tanto dp como dip en sus lugares.




Definiciones

px o dot es un pixel en la pantalla física.

Los 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

  • ldpi (bajo) ~ 120dpi
  • mdpi (medio) ~ 160 dpi
  • hdpi (alto) ~ 240dpi
    • la mayoría de los dispositivos en 2015 están aquí
  • xhdpi (extra-alto) ~ 320 dpi
    • Apple iPhone 4/5/6, Nexus 4
  • xxhdpi (extra-extra-alto) ~ 480dpi
    • Nexus 5
  • xxxhdpi (extra extra extra extra) ~ 640 ppp

dip o dp son píxeles independientes de la densidad , es decir, corresponden a más o menos píxeles dependiendo de la densidad física.

  • 1dp = 1px en mdpi

sp o sip es un píxel independiente de escala . Se escalan cuando la opción Texto grande está activada en Configuración > Accesibilidad

  • 1sp = 1dp
  • 1sp = 1.2dp con accesibilidad Texto grande

Qué usar?

Use sp para tamaño de texto.

Use dp para todo lo demás.




The screen of a mobile phone is made up of thousands of tiny dots known as pixels (px) . A pixel is the smallest element which goes to make the picture. The more the number of pixels to make a picture or wording, the sharper it becomes and makes the smartphone screen more easily readable.

Screen resolution is measured in terms of number of pixels on the screen. Screen resolution is a commonly-used specification when buying a device, but it's actually not that useful when designing for Android because thinking of screens in terms of pixels ignores the notion of physical size, which for a touch device is really really important.

Density independent pixel (dp or dip) allow the designer to create assets that appear in a expected way, no matter the resolution or density of target device.

A density independent pixel (dp or dip) is equal to one pixel at the baseline density or 160 dpi (dots per inch).

1 px/1dp = 160 dpi/160 dpi

2 px/1dp = 320 dpi(2x)/160 dpi

dónde,

dpi is dots per inch

So, at 320 dpi, 1 dp is equal to 2 px.

Fórmula

px/dp = dpi/160dpi

Dots per inch (dpi) is a measure of the sharpness (that is, the density of illuminated points) on a display screen. The dots per inch for a given picture resolution will differ based on the overall screen size since the same number of pixels are being spread out over a different space.

Working with density independent pixels help us to deal with a situation like where you have two devices with same pixel resolution, but differing amount of space. Suppose in a case, a tablet and phone has the same pixel resolution 1280 by 800 pixels (160 dpi) and 800 by 1280 pixels (320 dpi) respectively.

Now because a tablet is at baseline density (160 dpi) its physical and density independent pixels sizes are the same, 1280 by 800. The phone on the other hand has a higher pixel density, so it has half as many density independent pixels as physical pixels. So a phone has 400 by 640 density independent pixels. So using a density-independent pixel makes it easier to mentally picture that tablet has much more space than the phone.

Similarly, if you have two devices with similar screen size, but different pixel density, say one is 800 by 1280 pixels (320 dpi), and the other is 400 by 640 pixels (160 dpi), we don't need to define totally different layouts for these two devices as we can measure assets in terms of density independent pixel which is same for both devices.

800 by 1280 pixels (320dpi)=400 by 640 density independent pixel (dp)

400 by 640 pixels (160 dpi)=400 by 640 density independent pixel (dp)

Scale independent pixels(sp) is the preferred unit for font size. For accessibility purposes, Android allows users to customize their device's font size. Users that have trouble reading text can increase their device's font size. You can normally find this option in the display setting on your phone or tablet under font size. It's often also available through the accessibility settings.

With scale independent pixels, 16 sp is exactly the same as 16 dp when the device's font size is normal or 100%. But when device's font size is large, for example 125%, 16 sp will translate to 20 dp or 1.25 times 16.

If you use dp as the unit for font size, then that piece of text has a specific physical size no matter if the user has customize device's font size. Using sp units will make a better experience for people with impaired eyesight.

Reference : Udacity , Google




Related