Question

Si j'attribuer une valeur entière pour modifier une certaine taille de texte d'un TextView à l'aide du code Java, la valeur est interprétée comme pixel (px).

Maintenant, est-ce que quelqu'un sait comment assigner en sp?

Était-ce utile?

Autres conseils

Vous pouvez utiliser un DisplayMetrics objet pour aider à convertir entre les pixels et pixels mises à l'échelle avec le scaledDensity attribut.

DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
pixelSize = (int)scaledPixelSize * dm.scaledDensity; 

approche plus propre et plus réutilisable est

définir la taille du texte dans le fichier dimens.xml intérieur répertoire res/values/:

</resources>
   <dimen name="text_medium">14sp</dimen>
</resources>

et appliquer ensuite à la 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()));
}

I construire cette fonction pour calulating tout demension de pixels:

int getPixels(int unit, float size) {
    DisplayMetrics metrics = Resources.getSystem().getDisplayMetrics();
    return (int)TypedValue.applyDimension(unit, size, metrics);
}

Si l'unité est quelque chose comme TypedValue.COMPLEX_UNIT_SP.

Par SetTextSize par défaut, sans unités fonctionnent en SP (pixel échelles)

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);

La chose est si vous définissez R.dimen.desired_sp à 25 dans votre dimen.xml

  1. Sur le périphérique non-HD: desiredSp est encore 25, densité = 1
  2. Sur le périphérique HD (comme Nexus 7 2ème génération): desiredSp devient 50 ish, densité = 2

Lorsque la réponse acceptée ne fonctionne pas (par exemple lorsqu'il s'agit de la peinture), 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))

est un code pour la conversion PX SP format . 100% des travaux

view.setTextSize(TypedValue.COMPLEX_UNIT_PX, 24);

Après avoir essayé toutes les solutions et aucun donnant des résultats acceptables (peut-être parce que je travaillais sur un appareil avec les très grandes polices par défaut), ce qui suit a fonctionné pour moi (COMPLEX_UNIT_DIP = Pixels appareil indépendant):

textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);

A partir du niveau de 1 Api, vous pouvez utiliser le public void setTextSize (float size) procédé .

De la documentation:

  

Définissez la taille du texte par défaut à la valeur donnée, interprétée comme « mise à l'échelle   pixel » unités. Cette taille est ajustée en fonction de la densité de courant et   taille de la police préférence de l'utilisateur.

     

Paramètres:   taille -> float:. La taille de pixel mis à l'échelle

Ainsi, vous pouvez simplement faire:

textView.setTextSize(12); // your size in sp

Dans le cas si quelqu'un est à la recherche de façon Kotlin, vous pouvez faire

view.textSize = 12f
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top