web-dev-qa-db-fra.com

Quel est le lien entre dp, dip, dpi, ppi, pixels et pouces?

Je lisais les mesures dp, dip, px, sp , mais j'ai encore quelques questions sur dp/dpi vs ppi vs px vs pouce. Je ne suis pas capable de les comparer ... un pouce est-il le plus grand? 

Ils disent que 160 dpi signifie 160 pixels par pouce. Est-ce que cela signifie que 1 pouce contient 160 pixels? 

Ils disent aussi 1 pixel sur un écran de 160 dpi = 1 dp. Est-ce que cela signifie que 1 pixel et 1 dp sont égaux?

Et enfin, pourquoi devrions-nous utiliser dp au lieu de px? Je comprends que c’est l’idéal, mais pourquoi?

24
Chandeep

Vous devriez (presque) toujours utiliser des unités de dimensionnement flexibles, telles que dp, qui correspond à des pixels indépendants de la densité, car 300px sur un périphérique n’est pas nécessairement la même quantité d’écran que le 300px sur un autre. L'implication pratique la plus importante est que votre mise en page paraîtrait considérablement différente sur les appareils de densité différente de celle que vous avez conçue.

  • dp ou dip désigne des pixels indépendants de la densité
  • dpi ou ppi signifie points (ou pixels) par pouce
  • inch est une mesure physique liée à la taille réelle de l'écran
  • px signifie Pixels - un pixel remplit une quantité arbitraire de surface d'écran en fonction de la densité.

Par exemple, sur un écran 160dpi, 1dp == 1px == 1/160in, mais sur un écran 240dpi, 1dp == 1.5px. Donc non, 1dp != 1px. Il y a exactement un cas lorsque 1dp == 1px et se trouve sur un écran 160dpi. Les unités de mesure physiques telles que les pouces ne devraient jamais faire partie de votre conception - c'est-à-dire, sauf si vous créez une règle.

Une formule simple pour déterminer combien de pixels 1dp fonctionne est px = dp * (dpi / 160).

42
Chris Cashwell

dp est une mesure physique comme pouces. (Oui, c'est le cas. Continuez à lire.)

"Un dp correspond à la taille physique d'un pixel à 160 dpi" ( https://developer.Android.com/training/multiscreen/screendensities.html#TaskUseD )

La taille physique d'un pixel à 160 dpi est exactement 1/160ème de pouce. Par conséquent, la taille d'un dp est de 1/160ème de pouce. 160 dp = 1 pouce. 

Px est une unité de mesure quelque peu arbitraire sur un écran.

Pour obtenir des exemples de conversion de dp en in px sur différents périphériques, voir ici:

https://stackoverflow.com/a/39495538/984003

5
user984003

Quel est le lien entre dp, dip, dpi, ppi, pixels et pouces?

Aux fins du développement Android:

dp = dip
dpi = ppi
inch x dpi = pixels
dp = 160 x inch
dp = 160*pixels/dpi

Donc, sur un téléphone 160dpi (mdpi):

2 inches = 320 dp
2 inches = 320 pixels

Sur un téléphone à 180 dpi:

2 inches = 320 dp
2 inches = 360 pixels

Notez que 2 pouces correspond à TOUJOURS 320dp, indépendamment de la taille de l'écran. Un dp est une distance physique de 1/160ème de pouce.

La formule dp en pixels est intéressante:

dp = 160*pixels/dpi

Est équivalent à:

dp = pixels/(dpi/160)

dpi/160 est un facteur intéressant. C'est la densité relative par rapport à la corbeille mdpi d'Android et la quantité que vous devez redimensionner vos graphiques pour les différentes corbeilles de ressources. Vous verrez ce facteur mentionné à quelques reprises sur this page, 0.75 étant le facteur de ldpi.

4
Sam

DP est la résolution lorsque vous ne factorisez que la taille physique de l'écran. Lorsque vous utilisez DP, votre mise en page est adaptée à d'autres écrans de taille similaire avec des densités de pixels différentes.

De temps en temps, cependant, vous voulez réellement des pixels, et lorsque vous traitez des dimensions dans du code, vous traitez toujours avec des pixels réels, sauf si vous les convertissez.

0
Santhosh Shettigar

Je vais expliquer en utilisant un exemple.

float density = context.getResources().getDisplayMetrics().density;
float px = someDpValue * density;
float dp = somePxValue / density;

densité égale

.75 on ldpi (120 dpi)
1.0 on mdpi (160 dpi; baseline)
1.5 on hdpi (240 dpi)
2.0 on xhdpi (320 dpi)
3.0 on xxhdpi (480 dpi)
4.0 on xxxhdpi (640 dpi)

donc par exemple,

J'ai un Samsung S5 avec 432 dpi ( http://dpi.lv/#1920/[email protected] ).

Donc, density = 432/160 = phone's dpi/baseline = 2.7

Disons que ma barre supérieure est 48dp. Ceci est référencé à baseline (160dpi).

Donc, avec mon S5, ce sera 48dp * 2.7.

Ensuite, si je veux voir la hauteur réelle:

Ce sera (48dp * 2.7) / 432 dpi = 0.3 inches.

0
kalan