Wenn ich einen ganzzahligen Wert zum Ändern einer bestimmten Textgröße eines TextView
verwendeten Java-Codes zuweise, wird der Wert als pixel ( px
) interpretiert .
Weiß jetzt jemand, wie man es zuweist sp
?
http://developer.android.com/reference/android/widget/TextView.html#setTextSize%28int,%20float%29
Beispiel:
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 65);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.my_text_size_in_sp));
Wenn Sie Ihre Textgröße auf diese Weise ermitteln, wird SP bereits in PX konvertiert, wobei sowohl die Bildschirmdichte als auch der Textskalierungsfaktor berücksichtigt werden.Sie können ein
DisplayMetrics
Objekt verwenden, um die Konvertierung zwischen Pixeln und skalierten Pixeln mit demscaledDensity
Attribut zu unterstützen .quelle
may be adjusted in smaller increments at runtime based on a user preference for the font size
so die Schriftgröße wird berücksichtigt werden.Sauberer und wiederverwendbarer Ansatz ist
Definieren Sie die Textgröße in der
dimens.xml
Datei imres/values/
Verzeichnis:und wenden Sie es dann an
TextView
:quelle
Basierend auf dem Quellcode von
setTextSize
:Ich baue diese Funktion zum Berechnen einer Herabsetzung auf Pixel:
Wo Einheit so etwas ist
TypedValue.COMPLEX_UNIT_SP
.quelle
Standardmäßig arbeitet setTextSize ohne Einheiten in SP (skaliert Pixel)
quelle
Danke @John Leehey und @PeterH:
Die Sache ist, wenn Sie R.dimen.desired_sp bis 25 in Ihrer dimen.xml definieren
quelle
Wenn die akzeptierte Antwort nicht funktioniert (z. B. beim Umgang mit Farbe), können Sie Folgendes verwenden:
quelle
quelle
COMPLEX_UNIT_PX
, müssen Sie die Dichte teilen.Dies ist der Code für die Konvertierung von PX in SP . 100% funktioniert
quelle
Nachdem ich alle Lösungen ausprobiert hatte und keine akzeptable Ergebnisse lieferte (möglicherweise weil ich an einem Gerät mit standardmäßig sehr großen Schriftarten gearbeitet habe), funktionierte Folgendes für mich (COMPLEX_UNIT_DIP = Geräteunabhängige Pixel):
quelle
Ab API-Ebene 1 können Sie die
public void setTextSize (float size)
Methode verwenden.Aus der Dokumentation:
So können Sie einfach tun:
quelle