Frage

Wenn I einen ganzzahligen Wert zuweisen, einen bestimmten Textgröße eines TextView unter Verwendung von Java-Code zu ändern, wird der Wert als Pixel (px) interpretiert.

Jetzt Wer weiß, wie es in sp zuweisen?

War es hilfreich?

Andere Tipps

Sie können mit einem DisplayMetrics Objekt, um Hilfe zu konvertieren zwischen den Pixeln und skalierten Pixel mit dem scaledDensity Attribute .

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

Reiniger und wieder verwendbarer Ansatz ist

Textgröße in dimens.xml Datei in res/values/ Verzeichnis definieren:

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

und dann gilt es auf die TextView:

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

Auf der Grundlage der der Quellcode 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()));
}

ich diese Funktion bauen für calulating jede demension zu Pixel:

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

Wo Einheit ist so etwas wie TypedValue.COMPLEX_UNIT_SP.

Standardmäßig SetTextSize, ohne Einheiten arbeiten in SP (Skalen 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.

Danke @ John Leehey und @PeterH:

desiredSp = getResources().getDimension(R.dimen.desired_sp);
density = getResources().getDisplayMetrics().density;
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, desiredSp / density);

Die Sache ist, wenn Sie R.dimen.desired_sp bis 25 in Ihrem dimen.xml

definieren
  1. Ein Nicht-HD-Gerät: desiredSp ist nach wie vor 25, Dichte = 1
  2. Ein HD-Gerät (wie Nexus 7 2. Generation): desiredSp wird 50 ish, Dichte = 2

Wenn die akzeptierte Antwort nicht funktioniert (zum Beispiel, wenn sie mit Farbe zu tun) Sie können verwendet werden:

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

Dies ist der Code für die convert PX SP Format. 100% Arbeiten

view.setTextSize(TypedValue.COMPLEX_UNIT_PX, 24);

Nachdem alle Lösungen versucht und keine akzeptable Ergebnisse geben (vielleicht, weil ich auf einem Gerät mit Standard sehr großen Schriften arbeiten wurde), wird die folgende arbeitete für mich (COMPLEX_UNIT_DIP = Device Independent Pixel):

textView.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 14);

Von Api Stufe 1, können Sie die public void setTextSize (float size) Verfahren.

Aus der Dokumentation:

  

Stellen Sie die Standardtextgröße auf den angegebenen Wert, interpretiert als „skaliert   Pixel“Einheiten. Diese Größe eingestellt wird, basierend auf der Stromdichte und   Benutzerschriftgröße bevorzugt.

     

Parameter:   . Größe -> float: Die skalierte Pixelgröße

So können Sie einfach do:

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

Im Fall, wenn jemand für Kotlin Weg suchen, können Sie

view.textSize = 12f
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top