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
?
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 .la source
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 dures/values/
répertoire:puis l'appliquer à
TextView
:la source
Basé sur le code source de
setTextSize
:Je construis cette fonction pour calculer toute démension en pixels:
Où l'unité est quelque chose comme
TypedValue.COMPLEX_UNIT_SP
.la source
Par défaut setTextSize, sans les unités fonctionnent en SP (échelles pixel)
la source
Merci @John Leehey et @PeterH:
Le problème est que si vous définissez R.dimen.desired_sp à 25 dans votre dimen.xml
la source
Lorsque la réponse acceptée ne fonctionne pas (par exemple lorsque vous traitez avec Paint), vous pouvez utiliser:
la source
la source
COMPLEX_UNIT_PX
vous devez diviser la densité.Il s'agit du code pour convertir le format PX en SP . 100% fonctionne
la source
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):
la source
À partir du niveau 1 d'API, vous pouvez utiliser la
public void setTextSize (float size)
méthode.De la documentation:
Vous pouvez donc faire simplement:
la source