Comment faire pour affecter la taille du texte dans le sp de la valeur à l'aide de code java
Si je attribuer une valeur entière à changer à partir d'une certaine taille d'un TextView l'aide de code java, la valeur est interprétée comme le pixel (px). Maintenant, personne ne sait comment l'affecter dans les sp?
Vous devez vous connecter pour publier un commentaire.
http://developer.android.com/reference/android/widget/TextView.html#setTextSize%28int,%20float%29
Exemple:
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.my_text_size_in_sp));
Obtenir la taille de votre texte de cette façon déjà convertir SP PX, tenant à la fois densité de l'écran et le texte facteur d'échelle en compte.Vous pouvez utiliser un
DisplayMetrics
objet d'aider convertir entre les pixels et mise à l'échelle des pixels avec lesscaledDensity
l'attribut.may be adjusted in smaller increments at runtime based on a user preference for the font size
de sorte que la taille de la police va être pris en compte.Plus propre et plus réutilisable approche est
définir la taille du texte dans
dimens.xml
fichier à l'intérieur deres/values/
répertoire:et ensuite l'appliquer à la
TextView
:Basé sur le code source de
setTextSize
:- Je construire cette fonction pour calulating tout demension de pixels:
Où l'unité est quelque chose comme
TypedValue.COMPLEX_UNIT_SP
.Par défaut setTextSize, sans unités de travail dans le document SP (échelles de pixels)
Merci @Jean Leehey et @PeterH:
Le truc c'est que si vous définissez R. dimen.desired_sp à 25 dans votre dimen.xml
desiredSp est toujours de 25, densité = 1
desiredSp devient 50 ish, densité = 2
Lorsque l'on a accepté la réponse ne fonctionne pas (par exemple lorsque vous traitez avec de la Peinture de), vous pouvez utiliser:
COMPLEX_UNIT_PX
vous avez besoin de diviser la densité.C'est le code pour le convertir PX à SP format.
Fonctionne à 100%
Après avoir essayé toutes les solutions et aucune donnant des résultats acceptables (peut-être parce que je travaillais sur un périphérique par défaut en très gros caractères), il a travaillé pour moi (COMPLEX_UNIT_DIP = Appareil Indépendant Pixels):
Dans le cas où si quelqu'un est à la recherche de Kotlin manière, vous pouvez faire