2015-01-21 18 views
6

Ich habe zwei Szenarien:Android Text-Größe programmatisch zu groß

Erstens:

textView.setTextSize(getResources().getDimension(R.dimen.defaultTextSize)); 

Zweite in xml:

android:textSize="@dimen/defaultTextSize" 

in Werte/dimen.xml i erklärt haben defaultTextSize mit 20sp

In meinem ersten Fall ist der Text viel größer (und in einigen Bildschirmwiederholungen) t han in meinem zweiten Fall. Warum? Habe ich einen Fehler gemacht?

Antwort

11

setTextSize() nimmt Einheit als Pixel

verwenden

public float pixelsToSp(float px) 
{ 
    float scaledDensity = _context.getResources().getDisplayMetrics().scaledDensity; 
    return px/scaledDensity; 
} 

textView.setTextSize(pixelsToSp(getResources().getDimension(R.dimen.defaultTextSize))); 

oder

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.defaultTextSize)) 
+2

Absolut keine Ahnung, warum, aber die zweite Empfehlung an meine GalaxyS4 nicht funktioniert versucht mit. Oi Vey Android ... aber Lösung 1 hat funktioniert, also danke. –

+1

@Kufuma es funktioniert nicht, weil es falsch ist: sollte 'COMPLEX_UNIT_PX' anstelle von' COMPLEX_UNIT_SP' sein. Siehe auch Blackbelt's Antwort auf dieser Seite. –

6

Die Implementierung von setTextSize(float size)

public void setTextSize(float size) { 
    setTextSize(TypedValue.COMPLEX_UNIT_SP, size); 
} 

Was in Ihrem Fall geschieht, ist, dass Sie den Wert, den Sie setTextSize vorgesehen sind, Skalierung, da getDimension kehrt die Dimension durch die Metrik multipliziert. Versuchen mit

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.defaultTextSize)); 
0

Textview verwendet Resources.getDimensionPixelSize Methode nicht Resources.getDimension für textsize.

1

Haben Sie

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.defaultTextSize)); 
Verwandte Themen