Si j'attribue une valeur entière pour modifier une certaine taille de texte d'un TextViewcode java à l'aide, la valeur est interprétée comme pixel ( px).
Maintenant, quelqu'un sait-il comment l'attribuer sp?
Si j'attribue une valeur entière pour modifier une certaine taille de texte d'un TextViewcode java à l'aide, la valeur est interprétée comme pixel ( px).
Maintenant, quelqu'un sait-il comment l'attribuer sp?
Réponses:
http://developer.android.com/reference/android/widget/TextView.html#setTextSize%28int,%20float%29
Exemple:
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 65);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.my_text_size_in_sp));obtenir votre taille de texte de cette façon convertira déjà SP en PX, en tenant compte à la fois de la densité d'écran et du facteur d'échelle du texte.
Vous pouvez utiliser un DisplayMetricsobjet pour faciliter la conversion entre pixels et pixels mis à l'échelle avec l' scaledDensityattribut .
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
pixelSize = (int)scaledPixelSize * dm.scaledDensity;
may be adjusted in smaller increments at runtime based on a user preference for the font sizeque la taille de police sera prise en compte.
Une approche plus propre et plus réutilisable est
définir la taille du texte dans le dimens.xmlfichier à l'intérieur du res/values/répertoire:
</resources>
<dimen name="text_medium">14sp</dimen>
</resources>
puis l'appliquer à TextView:
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.text_medium));
Basé sur le code source de setTextSize:
public void setTextSize(int unit, float size) {
Context c = getContext();
Resources r;
if (c == null)
r = Resources.getSystem();
else
r = c.getResources();
setRawTextSize(TypedValue.applyDimension(
unit, size, r.getDisplayMetrics()));
}
Je construis cette fonction pour calculer toute démension en pixels:
int getPixels(int unit, float size) {
DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
return (int)TypedValue.applyDimension(unit, size, metrics);
}
Où l'unité est quelque chose comme TypedValue.COMPLEX_UNIT_SP.
Par défaut setTextSize, sans les unités fonctionnent en SP (échelles pixel)
public void setTextSize (float size)
Added in API level 1
Set the default text size to the given value, interpreted as "scaled pixel" units. This
size is adjusted based on the current density and user font size preference.
Merci @John Leehey et @PeterH:
desiredSp = getResources().getDimension(R.dimen.desired_sp);
density = getResources().getDisplayMetrics().density;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, desiredSp / density);
Le problème est que si vous définissez R.dimen.desired_sp à 25 dans votre dimen.xml
Lorsque la réponse acceptée ne fonctionne pas (par exemple lorsque vous traitez avec Paint), vous pouvez utiliser:
float spTextSize = 12;
float textSize = spTextSize * getResources().getDisplayMetrics().scaledDensity;
textPaint.setTextSize(textSize);
semeTextView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
context.getResources().getDimension(R.dimen.text_size_in_dp))
COMPLEX_UNIT_PXvous devez diviser la densité.
Il s'agit du code pour convertir le format PX en SP . 100% fonctionne
view.setTextSize(TypedValue.COMPLEX_UNIT_PX, 24);
Après avoir essayé toutes les solutions et aucune ne donnant des résultats acceptables (peut-être parce que je travaillais sur un appareil avec de très grandes polices par défaut), ce qui suit a fonctionné pour moi (COMPLEX_UNIT_DIP = Pixels indépendants de l'appareil):
textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);
À partir du niveau 1 d'API, vous pouvez utiliser la public void setTextSize (float size)méthode.
De la documentation:
Définissez la taille de texte par défaut sur la valeur donnée, interprétée comme des unités de "pixels mis à l'échelle". Cette taille est ajustée en fonction de la densité actuelle et de la préférence de taille de police de l'utilisateur.
Paramètres: size -> float: taille du pixel à l'échelle.
Vous pouvez donc faire simplement:
textView.setTextSize(12); // your size in sp