web-dev-qa-db-fra.com

Comment convertir pt en sp?

Je suis un concepteur visuel travaillant sur un design Android et j'essaie de spécifier mon fichier PSD à nos ingénieurs. Je ne trouve pas de documentation concernant la conversion de la taille du point en SP pour le type dans un appareil Android. documentation. (Il suffit d'utiliser SP pour le type).

36
Megatallica

Le problème est que cela dépend de la densité. Vraiment, ce ne sont pas de bonnes mesures pour essayer de comparer. 

  • Points : Il y a 12 points dans un pica, 6 picas par pouce, soit 72 (plus précisément 72,27) points par pouce. 

  • Pixels indépendants du périphérique (DP) : Ceux-ci seront égaux à la taille en pixels pour les écrans MDPI, à 1,5 fois la taille en pixels pour les écrans HDPI et à deux fois la taille en pixels pour les écrans XHDPI. (par exemple 12dp = 12px MDPI, 18px HDPI, 24px XHDPI).

  • Pixels mis à l'échelle : Ceux-ci seront équivalents à la valeur DP, mais seront mis à l'échelle selon la préférence de l'utilisateur pour être plus petit ou plus grand.

Si vous concevez à 72 dpi (paramètre DPI par défaut de Photoshop), une police de 8 pt équivaut à 8px, soit 8px pour MDPI, 12px pour HDPI et 16px pour XHDPI, ou plus simplement 8dp pour toutes les densités. Je ne sais pas dans quelle mesure la mise à l'échelle est appliquée à différents paramètres SP. Vous devez donc rechercher ce qui se passe, mais je voudrais simplement leur donner la maquette et les laisser dimensionner de manière appropriée à partir de là. peut l'obtenir assez proche visuellement de cela.

42
kcoppock

Contrairement à dp (et à sp avec moins le facteur de taille du texte de l'utilisateur), pt a pratiquement la même mesure physique. Dp est plus ou moins une approximation approximative, car il utilise le même facteur pour une large plage de dpi.

Vous ne pouvez pas convertir pt en sp, comme le dit Flavio. Vous pouvez toutefois convertir approximativement pt en dp (+/- 30% dans les cas extrêmes, mais attendez au moins +/- 10%). 

En utilisant les compartiments dpi (ldp = 120, mdpi = 160, hdpi = 240, xhdpi = 320), le facteur de conversion le plus générique serait x0.45 (= 72/120 * 0.75 = 72/160 * 1 = 72/240 * 1,5 = 72/320 * 2) si vous utilisez les valeurs exactes du compartiment en ppp.

Pour des facteurs plus précis:

  • mdpi (facteur de mise à l'échelle: 1,0) L'écran WXGA 10,1 "(149 ppp) correspond à 0.483076923 (= 72/149 * 1.0) 
  • hdpi (facteur de mise à l'échelle: 1,5) Nexus 7 (216 dpi) est 0,5 (= 72/216 * 1,5)
  • xhdpi (facteur de mise à l'échelle: 2,0) Nexus 10 (300 dpi) est 0.48 (= 72/300 * 2)

Donc, 12 pt serait sur ...

  • 10.1 "WXGA: 24.84dp
  • Nexus 7: 24 dp
  • Nexus 10: 25dp
  • valeur du compartiment dpi: 26.666dp

Vous pouvez utiliser les mêmes valeurs pour sp, mais gardez à l'esprit que celles-ci peuvent être activées/diminuées par les paramètres de l'utilisateur.

10
patrickf

^ Ce que Flavio a dit. mais consultez la vue d'ensemble de la classe de mesures d'affichage sur le site Android Developers. Vous pourriez trouver ce dont vous avez besoin ici ... http://developer.Android.com/reference/Android/util/DisplayMetrics.html#

1
ItsGeorge

C'est un excellent outil pour vous aider à convertir entre les différentes mesures - mettez ce que vous savez et calculez le reste!

http://angrytools.com/Android/pixelcalc/

1
MarcusTucker

Il n'y a pas de correspondance directe entre pixels et sp, car les sps sont définis de manière dynamique lorsque les utilisateurs modifient la taille de la police du périphérique dans les paramètres système. L'utilisateur peut souhaiter voir toutes les polices de l'application dans des tailles plus petites ou plus grandes. C'est une fonctionnalité d'accessibilité fournie par le système d'exploitation.

1
Flávio Faria

Il y a 72 points par pouce et 160 sp par pouce (avec une taille de police standard dans les paramètres de l'appareil). cela signifie qu'il y a 160 spsp par 72pts. 160sp/72pts simplifie à 20/9. Donc, lors de la conversion de pts en sp ou dp, utilisez pts * 20/9. Comme déjà mentionné par d'autres personnes, sp varie en fonction des paramètres de l'utilisateur. Par conséquent, si vous ne souhaitez pas que la taille du texte change avec les paramètres du périphérique, utilisez dp.

0
Ethan