Est-il possible de changer l'unité pour Paint.setTextSize()
? Pour autant que je sache, c'est le pixel, mais j'aime définir la taille du texte dans DIP pour la prise en charge de plusieurs écrans.
Convertissez-le comme ceci
// The gesture threshold expressed in dip
private static final float GESTURE_THRESHOLD_DIP = 16.0f;
// Convert the dips to pixels
final float scale = getContext().getResources().getDisplayMetrics().density;
mGestureThreshold = (int) (GESTURE_THRESHOLD_DIP * scale + 0.5f);
// Use mGestureThreshold as a distance in pixels
d'ici http://developer.Android.com/guide/practices/screens_support.html#dips-pels
Je sais que ce sujet est ancien et a déjà été répondu, mais je voudrais également suggérer ce morceau de code:
int MY_DIP_VALUE = 5; //5dp
int pixel= (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
MY_DIP_VALUE, getResources().getDisplayMetrics());
La réponse acceptée concerne les gestes, pas la définition de la taille du texte. La réponse votée la plus élevée (au moment d'écrire ces lignes) est proche, mais la documentation recommande d'utiliser sp
plutôt que dp
car en plus d'être mise à l'échelle pour les densités d'écran (comme dp
les valeurs sont), sp
est également mis à l'échelle en fonction des tailles de police préférées par l'utilisateur.
À partir d'un int
dans le code
int spSize = 17;
float scaledSizeInPixels = spSize * getResources().getDisplayMetrics().scaledDensity;
mTextPaint.setTextSize(scaledSizeInPixels);
Ou bien
int spSize = 17;
float scaledSizeInPixels = TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
spSize, getResources().getDisplayMetrics());
mTextPaint.setTextSize(scaledSizeInPixels);
À partir des ressources
Ou si vous avez la valeur sp
ou dp
dans les ressources:
<resources>
<dimen name="fontSize">17sp</dimen>
</resources>
avec
float scaledSizeInPixels = getResources().getDimensionPixelSize(R.dimen.fontSize);
mTextPaint.setTextSize(scaledSizeInPixels);
Autres liens
Et voici une méthode encore plus courte pour convertir les dp-s en px-els en tenant compte des métriques d'affichage
Si votre objet Paint est utilisé pour dessiner du texte sur un canevas, vous pouvez laisser le canevas gérer la mise à l'échelle pour vous.
Lors de l'appel Canvas.drawText()
la taille du texte est d'abord déterminée par l'objet passé dans Paint
, qui peut être défini via Paint.setTextSize()
. La taille du texte est automatiquement mise à l'échelle par Canvas
en fonction de la densité du canevas, qui peut être trouvée en utilisant Canvas.getDensity()
.
Lorsque vous définissez la taille du texte sur un objet Paint qui sera dessiné sur Canvas, travaillez avec une valeur unitaire de dp
ou sp
et laissez Canvas gérer la mise à l'échelle pour vous.