[Android] Quelle est la différence entre "px", "dip", "dp" et "sp"?



Answers

À peu près tout à ce sujet et comment obtenir le meilleur support pour plusieurs écrans avec différentes tailles et densités est très bien documenté ici:

Taille de l'écran
Taille physique réelle, mesurée en diagonale de l'écran. Pour plus de simplicité, Android regroupe toutes les tailles d'écran réelles en quatre tailles généralisées: petit, normal, grand et extra-large.

Densité de l'écran
La quantité de pixels dans une zone physique de l'écran; généralement appelé dpi (points par pouce). Par exemple, un écran de densité "faible" a moins de pixels dans une zone physique donnée, par rapport à un écran de densité "normale" ou "haute". Pour plus de simplicité, Android regroupe toutes les densités d'écran réelles en six densités généralisées: faible, moyenne, élevée, extra-haute, extra-extra-haute et extra-extra-extra-haute.

Orientation
L'orientation de l'écran du point de vue de l'utilisateur. Ceci est soit paysage ou portrait, ce qui signifie que le format de l'écran est large ou grand, respectivement. Sachez que non seulement différents appareils fonctionnent par défaut dans différentes orientations, mais que l'orientation peut changer au moment de l'exécution lorsque l'utilisateur fait pivoter l'appareil.

Résolution
Le nombre total de pixels physiques sur un écran. Lors de l'ajout de la prise en charge de plusieurs écrans, les applications ne fonctionnent pas directement avec la résolution. les applications ne devraient concerner que la taille et la densité de l'écran, comme spécifié par les groupes de taille et de densité généralisés.

Pixel indépendant de la densité (dp)
Une unité de pixels virtuelle que vous devez utiliser pour définir la disposition de l'interface utilisateur, pour exprimer les dimensions de disposition ou la position de manière indépendante de la densité. Le pixel indépendant de la densité est équivalent à un pixel physique sur un écran de 160 dpi, qui est la densité de base supposée par le système pour un écran de densité "moyenne". Lors de l'exécution, le système gère de manière transparente toute mise à l'échelle des unités dp, en fonction de la densité réelle de l'écran utilisé. La conversion des unités dp en pixels est simple: px = dp * (dpi / 160) . Par exemple, sur un écran de 240 dpi, 1 dp équivaut à 1,5 pixels physiques. Vous devez toujours utiliser les unités dp lors de la définition de l'interface utilisateur de votre application, afin de garantir l'affichage correct de votre interface utilisateur sur des écrans de densités différentes.

Si vous êtes sérieux au sujet du développement d'une application Android pour plus d'un type d'appareil, vous devriez avoir lu le document de développement de support d'écrans au moins une fois. En plus de cela, il est toujours bon de connaître le nombre réel de périphériques actifs ayant une configuration d'écran particulière.

Question

Quelle est la différence entre les unités de mesure Android?

  • px
  • tremper
  • dp
  • sp



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.




La différence entre les unités dp et sp mentionnées en tant que " préférence de taille de police de l'utilisateur " par les réponses copiées à partir de la documentation officielle peut être vue au moment de l'exécution en changeant l'option Settings->Accessibility->Large Text .

Large Text option Large Text volumineux force le texte à devenir 1.3 fois plus volumineux.

private static final float LARGE_FONT_SCALE = 1.3f;

Cela pourrait bien sûr dépendre du fournisseur car il se trouve dans des packages/apps/Settings .




dp est dip . Utilisez-le pour tout (marge, rembourrage, etc.).

Utilisez sp pour {text-size} seulement.

Pour obtenir la même taille sur différentes densités d'écran, Android convertit ces unités en pixels à l'exécution, il n'y a donc pas de calculs difficiles à faire.

Voyez la différence entre px , dp et sp sur différentes tailles d'écran.

Source: Programmation Android: Le Guide du Big Nerd Ranch




dpi -

  • Points par pouces
  • Mesurer la densité de pixels de l'écran.

px - pixel

  • Pour mapper les pixels de l'écran

pt - points

  • Environ 1/72 de pouce, par rapport à la taille de l'écran physique.

en pouces - par rapport à la taille de l'écran physique (1 pouce = 2,54 cm).

millimètre - en ce qui concerne la taille de l'écran physique.

sp - pixel indépendant de l'échelle.

  • Basé sur la préférence de taille de police de l'utilisateur.
  • La police devrait être en 'sp'.

dip -

  • dip == dp
  • Pixel indépendant de la densité.
  • Cela varie en fonction de la densité de l'écran.
  • Dans l'écran 160 dpi, 1 dp = 1 pixel.
  • Utilisez dp sauf la taille de police du texte.

En standard, dp et sp sont utilisés. sp pour la taille de la police et dp pour tout le reste.

Formule pour la conversion d'unités:

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  



Où utiliser quoi et relation entre px et dp?

Pixel indépendant de la densité (dp)

Une unité de pixels virtuelle que vous devez utiliser pour définir la disposition de l'interface utilisateur, pour exprimer les dimensions de disposition ou la position de manière indépendante de la densité. Comme décrit ci-dessus, le pixel indépendant de la densité est équivalent à un pixel physique sur un écran de 160 dpi, qui est la densité de base supposée par le système pour un écran de densité "moyenne". Lors de l'exécution, le système gère de manière transparente toute mise à l'échelle des unités dp, en fonction de la densité réelle de l'écran utilisé. La conversion des unités dp en pixels est simple:

px = dp * (dpi / 160).

Par exemple, sur un écran de 240 dpi, 1 dp équivaut à 1,5 pixels physiques. Vous devez toujours utiliser les unités dp lors de la définition de l'interface utilisateur de votre application, afin de garantir l'affichage correct de votre interface utilisateur sur des écrans de densités différentes.

Comprendre pixel à dp et vice versa est très important (en particulier pour donner des valeurs dp exactes à l'équipe créative)

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
  • Essayez d'obtenir toutes les valeurs de pixels en nombres pairs de l'équipe de création. Sinon, la précision perdue se produira en multipliant par 0.5.

px

C'est expliqué ci-dessus. Essayez d'éviter dans les fichiers de mise en page. Mais il y a des cas, où px est requis. par exemple, la ligne de séparation ListView. px est mieux ici pour donner une ligne d'un pixel comme un diviseur pour toutes les résolutions d'écran.

sp

Utilisez sp pour les tailles de police. Alors seulement la police dans l'application changera pendant que la taille des polices de l'appareil change (c'est-à-dire, Affichage -> Polices sur le périphérique). Si vous souhaitez conserver une police de taille statique dans l'application, vous pouvez donner la dimension de la police dans dp. Dans un tel cas, cela ne changera jamais. Les développeurs peuvent avoir une telle exigence pour certains écrans spécifiques, pour cela, les développeurs peuvent utiliser dp au lieu de sp. Dans tous les autres cas, sp est recommandé.




Tout ce qui a trait à la taille du texte et à l'apparence doit utiliser sp ou pt . Considérant que tout ce qui est lié à la taille des contrôles, les dispositions, etc. doit être utilisé avec dp .

Vous pouvez utiliser à la fois dp et dip à ses places.




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.




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

où,

dpi is dots per inch

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

Formule

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




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 .

Usage

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).

Attention

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

Exemple

<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 .




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. Non recommandé.

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




Fondamentalement, le seul moment où px s'applique est un px, et c'est si vous voulez exactement un pixel sur l'écran, comme dans le cas d'un diviseur:

Sur> 160 dpi, vous pouvez obtenir 2-3 pixels,

Sur> 120 dpi, il arrondit à 0.




px Pixels - le point par échelle correspond aux pixels réels sur l'écran.

en pouces - basé sur la taille physique de l'écran.

mm Millimètres - en fonction de la taille physique de l'écran.

pt Points - 1/72 de pouce en fonction de la taille physique de l'écran.

dp Density - independent Pixels - une unité abstraite basée sur la densité physique de l'écran. Ces unités sont relatives à un écran de 160 dpi, donc un dp est un pixel sur un écran de 160 dpi. Le rapport dp-pixel va changer avec la densité de l'écran, mais pas nécessairement en proportion directe. Note: Le compilateur accepte à la fois dip et dp , bien que dp soit plus cohérent avec sp .

sp - Pixels indépendants de l'échelle - c'est comme l'unité dp , mais elle est également mise à l'échelle par la préférence de taille de police de l'utilisateur. Il est recommandé d'utiliser cette unité lors de la spécification des tailles de police, de sorte qu'elles soient ajustées en fonction de la densité de l'écran et des préférences de l'utilisateur.

Prenons l'exemple de deux écrans de la même taille mais dont l'un a une densité d'écran de 160 dpi (points par pouce, soit pixels par pouce) et l'autre est de 240 dpi.

                          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éfinitions

px ou dot est un pixel sur l'écran physique.

dpi sont des pixels par pouce sur l'écran physique et représentent la densité de l'affichage.

Android donne des noms d'alias à plusieurs densités

  • ldpi (faible) ~ 120dpi
  • mdpi (moyen) ~ 160dpi
  • hdpi (haut) ~ 240dpi
    • la plupart des appareils en 2015 sont ici
  • xhdpi (extra-haute) ~ 320dpi
    • Apple iPhone 4/5/6, Nexus 4
  • xxhdpi (extra-extra-haut) ~ 480dpi
    • Nexus 5
  • xxxhdpi (extra-extra-extra-haut) ~ 640 dpi

dip ou dp sont des pixels indépendants de la densité , c'est-à-dire qu'ils correspondent à plus ou moins de pixels en fonction de la densité physique.

  • 1dp = 1px sur mdpi

sp ou sip est un pixel indépendant de l'échelle . Ils sont mis à l'échelle lorsque l'option Texte volumineux est activée dans Paramètres > Accessibilité

  • 1sp = 1dp
  • 1sp = 1.2dp avec accessibilité Large Text

Que utiliser?

Utilisez sp pour la taille du texte.

Utilisez dp pour tout le reste.




Voici la formule utilisée par Android:

px = dp * (dpi / 160)

Où dpi est l'une des densités d'écran suivantes. Pour une liste de toutes les densités possibles, cliquez ici

Il définit les constantes "DENSITY_ *".

  • ldpi (faible) ~ 120dpi
  • mdpi (moyen) ~ 160dpi
  • hdpi (haut) ~ 240dpi
  • xhdpi (extra-haute) ~ 320dpi
  • xxhdpi (extra-extra-haut) ~ 480dpi
  • xxxhdpi (extra-extra-extra-haut) ~ 640 dpi

Pris d' ici .

Cela permettra de trier beaucoup de confusion lors de la traduction entre px et dp, si vous connaissez votre dpi d'écran.

Donc, disons que vous voulez une image de 60 dp pour un écran hdpi alors la taille de pixel physique de 60 dp est:

px = 60 * (240 / 160)



Links