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?
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 pouceinch
est une mesure physique liée à la taille réelle de l'écranpx
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)
.
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:
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.
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.
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
.