2015-01-21 21 views
6

Mam dwa szenarios:Android tekstu rozmiar programowo zbyt duży

pierwszy:

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

drugi w xml:

android:textSize="@dimen/defaultTextSize" 

w wartościach/dimen.xml i zadeklarowały defaultTextSize z 20sp

W moim pierwszym przypadku tekst jest znacznie większy (i inny w niektórych parametrach ekranowych) t han w moim drugim przypadku. Czemu? Czy popełniłem błąd?

Odpowiedz

11

setTextSize() bierze jednostkę jako piksel

Użyj tego

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

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

lub

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

absolutnie żadnego pojęcia dlaczego, ale drugi zalecenie nie działa na moim GalaxyS4. Oi Vey Android ... ale rozwiązanie 1 działało, więc dziękuję. –

+1

@Kufuma to nie działa, ponieważ jest błędne: powinno być "COMPLEX_UNIT_PX" zamiast "COMPLEX_UNIT_SP". Zobacz także odpowiedź Blackbelt na tej stronie. –

6

Realizacja setTextSize(float size)

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

Co się dzieje w przypadku, jest to, że są skalowania wartości podane do setTextSize, ponieważ getDimension zwrotów wymiaru pomnożone przez metrykę. Spróbuj z

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

TextView wykorzystuje metodę Resources.getDimensionPixelSize, nie Resources.getDimension dla TEXTSIZE.

1

Czy próbowali za pomocą

textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,getResources().getDimension(R.dimen.defaultTextSize)); 
Powiązane problemy