2011-01-20 16 views
5

J'ai utilisé l'unité pt dans des fichiers XML. Maintenant, j'ai besoin de définir la largeur d'un élément à l'exécution. Comment puis-je définir la largeur par points afin que ce soit la même unité que j'ai utilisée partout ailleurs. Je suppose que je vais devoir multiplier par résolution et ppp. Un échantillon de code serait le meilleur.Android: convertir des points en pixels

+0

S'il vous plaît voir mon article concernant la conversion des points en pixels http://systemdotrun.blogspot.co.uk/2014/09/whats-point-in-font-sizing.html? – Dori

Répondre

10

D'abord, vous devriez vraiment lire ce qui suit en profondeur l'article de la documentation Android Developer:

http://developer.android.com/guide/practices/screens_support.html

droit au milieu, vous trouverez la suivant sous le titre:

N'utilisez pas de valeurs de pixels codées en dur dans votre code

// Convert the dps to pixels 
final float scale = getContext().getResources().getDisplayMetrics().density; 
mGestureThreshold = (int) (GESTURE_THRESHOLD_DP * scale + 0.5f); 
+1

Pourquoi y a-t-il un "+ 0.5f" sur la deuxième ligne? Nombre magique dans cet exemple ou est-il nécessaire de convertir correctement les pixels en dp? – C0deAttack

+3

Arrondit au entier le plus proche lorsque l'expression est convertie en nombre entier. – Blrfl

+0

Blrfl a raison de arrondir à l'entier le plus proche. – Yahel

1

Vous pouvez utiliser dip au lieu de pt

+1

J'utilise pt au lieu de dip parce que cela a plus de sens pour les non-programmeurs. Si quelqu'un me demande la taille, je peux dire 12 points et ils peuvent savoir ce que c'est. Si je dis pixels alors ils ne réalisent pas que les pixels d'Android sont beaucoup plus petits qu'ils ne le sont sur PC et si je dis dips alors ils seront confrontés à un nouveau mot. Tout ça de côté. Puis-je utiliser dip à l'exécution? Puis-je convertir un pt en dip? –

+0

En ce qui concerne votre trempette à la question de l'exécution. Oui, vous pouvez, mais vous devez convertir les pixels en DP en multipliant les pixels par le facteur d'échelle des écrans que vous pouvez obtenir avec context(). GetResources(). GetDisplayMetrics(). Density. – C0deAttack

Questions connexes