2010-08-03 22 views
3

J'ai deux appareils - HTC Tattoo et Sony Ericsson Xperia X10. L'un a 145 DPI, l'autre 245 DPI.Taille physique de la police dans les points dans Android

Lorsque je spécifie la taille de police pour un TextView points, comme ceci:

textView.setTextSize(TypedValue.COMPLEX_UNIT_PT, 6.5f); 

-je obtenir différentes taille physique du texte sur ces deux appareils. Sur 245 DPI, le texte est à peine lisible. Maintenant, la taille «pt» est censée être physique. Par exemple, dans mon test, les deux blocs de texte doivent avoir des lettres de la même hauteur physique. Ce qui n'est pas le cas.

Qu'est-ce qui ne va pas ici? Merci pour l'aide, Yuri.

+0

S'il vous plaît voir mon article de blog concernant la taille des points http://systemdotrun.blogspot.co.uk/2014/09/whats-point-in-font-sizing.html ?. Ceci plus la réponse ci-dessous est tout ce que vous devez savoir! http://stackoverflow.com/a/3414215/236743 – Dori

Répondre

5

En fait, les points toujours du travail à chaque fois que les périphériques sous-jacents donne des paramètres d'affichage correct.

Par exemple, j'ai testé cinq appareils:

NAME  OS metrics.ydpi REAL_DPI DDPI SD 
XPERIA 1.6 159.49677  325  240 1.5 
Liquid 1.6 263.8958  285  240 1.5 
Tattoo 1.6 145.14067  match  120 0.75 
Hero  1.5 179.29352  match  -  1.0 
Galaxy 1.6 160.41878  180  160 1.0 

Comme on le voit, que HTC Tattoo et HTC Hero donner des informations d'affichage propre à l'API Android.

C'est pourquoi les points ont des tailles physiques différentes sur différents périphériques (pas tous, cependant). La seule façon que j'ai trouvée pour grossir les polices/images est de supposer que tout est de 160 DPI et d'utiliser DisplayMetrics # scaledDensity - ce qui est faux, mais je ne vois pas d'autre moyen.

+0

D'une autre manière pourrait être d'utiliser la base de données de l'appareil, au moins pour les plus populaires. – southerton

+0

Est-ce que quelqu'un sait si cela fonctionne mieux 6 ans plus tard? – user3175580

6

L'unité pt est constituée de points qui ne seront pas mis à l'échelle en fonction de la densité. Pour les non-textes, vous voulez dip (ou dp), qui sont des pixels indépendants de la densité. Ceux-ci seront mis à l'échelle en fonction de la densité. Pour le texte, vous voulez sp, qui évoluera en fonction de la densité, mais aussi en fonction de la taille de police préférée de l'utilisateur.

Il y a un peu d'information là-dessus, et aussi dispersés ailleurs dans les docs Android.

http://developer.android.com/guide/practices/screens_support.html#screen-independence

MISE À JOUR: voici une description de chacune des unités de dimension, qui, comme Yuri souligne à juste titre suggère que pt devrait toujours être 1/72 de pouce sur l'écran physique. Cela ne semble pas fonctionner de cette façon, et la réponse est juste d'utiliser dp et sp - si vous voulez exposer quelque chose comme des points à votre utilisateur, faites juste quelques maths (dp peut être supposé être 1px sur un écran 160dpi , soit 1/160ème de pouce).

http://developer.android.com/guide/topics/resources/more-resources.html#Dimension

+0

Selon le doc: "Points - 1/72 de pouce basé sur la taille physique de l'écran." Peu importe quelle densité. Peu importe quoi que ce soit. Tout comme un millimètre est toujours un millimètre sur n'importe quel écran. 1/72 d'un pouce est 1/72 de pouce, peu importe le nombre de pixels que cela prendra. Laissez-moi vous expliquer à propos de mon choix. Les points sont l'unité de police standard pour de nombreuses applications.Les utilisateurs ne veulent pas spécifier leurs tailles de police en fonction d'une nouvelle unité de mesure. Les points sont standard et communs. Dans le navigateur de votre PC, les applications Microsoft Word, Notepad et Mac. –

+0

Oui, la documentation lit comme si pt devait toujours avoir la même taille physique, c'est un peu trompeur. Mais dp et sp semblent être les unités recommandées. 1dp vaut 1px sur un écran 160dpi (c'est-à-dire 1/160 de pouce), donc si vous voulez exposer un point équivalent à vos utilisateurs, ce serait simplement une simple conversion mathématique. – Nick