Si j'attribue une valeur entière pour modifier une certaine taille de texte d'un TextView
code 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 TextView
code 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 DisplayMetrics
objet pour faciliter la conversion entre pixels et pixels mis à l'échelle avec l' scaledDensity
attribut .
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 size
que 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.xml
fichier à 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_PX
vous 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