Comment attribuer la taille du texte en valeur sp using le code java

Si j'attribue une valeur entière pour modifier une certaine taille de texte d'un TextView utilisant le code java, la valeur est interprétée comme un pixel (px). Maintenant, est-ce que quelqu'un sait comment l'affecter en sp?

  • Différence entre LocationRequest setInterval (long millis) et LocationRequest setFastestInterval (long millis)
  • La BAD ne reconnaît pas mon Galaxy Nexus - Win7
  • Quel est le but de l'item-id dans Android ListView Adapter?
  • Android Google Map API V2: ouvrir la fenêtre d'informations personnalisées sur le côté droit du marqueur
  • Désinscription de tous les sujets à la fois à partir de la messagerie Firebase
  • Détecter et manipuler besoin de vous connecter pour wifi
  • CardView Corner Radius
  • Comment dessiner des polygones d'angle arrondi sur une toile Android?
  • NullPointerException avec ProgressBar à l'aide de ActionBarCompat
  • Android Studio: impossible de démarrer Git
  • L'activité n'est pas assignable à l'activité
  • Uncaught exception lancé par le finalisateur java.lang.IllegalStateException: Binder a été finalisé
  • 9 Solutions collect form web for “Comment attribuer la taille du texte en valeur sp using le code java”

    http://developer.android.com/reference/android/widget/TextView.html#setTextSize%28int,%20float%29

    Exemple:

    textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 65); 

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

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

    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 crée cette fonction pour calomnier toute démence 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 .

    Une approche plus propre et plus réutilisable est

    Définissez la taille du texte dans le fichier dimens.xml à l'intérieur de res/values/ directory:

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

    Puis appliquez-le à TextView :

     textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, context.getResources().getDimension(R.dimen.text_medium)); 

    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 un périphérique non HD: desireSp est encore 25, densité = 1
    2. Sur le périphérique HD (comme Nexus 7 2ème génération): desireSp devient 50 ish, densité = 2

    Par défaut setTextSize, sans unités fonctionnent dans SP (pixel à l'échelle)

     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. 

    Lorsque la réponse acceptée ne fonctionne pas (par exemple, lorsque vous traitez 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)) 

    Il s'agit du code du format PX vers le format SP . 100% des travaux

     view.setTextSize(TypedValue.COMPLEX_UNIT_PX, 24); 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.