Połączenie TextView.setTextSize()
działa nieprawidłowo. Zaraz po wywołaniu, setTextSize
jeśli otrzymamy, getTextSize
zwraca znacznie wyższą wartość niż to, na którą ustawiliśmy wcześniej.
Oto, co robimy:
zoomControl.setOnZoomInClickListener(new OnClickListener() {
public void onClick(View view) {
float size = mViewShabad.getTextSize() + 1;
textView.setTextSize(size);
}
});
Czy ktoś to widział wcześniej?
Odpowiedzi:
Różnica polega na tym, że w
setTextSize(int size)
metodzie domyślnym typem jednostki jest „sp” lub „skalowane piksele”. Ta wartość będzie mieć inny wymiar piksela dla każdej gęstości ekranu (ldpi, mdpi, hdpi).getTextSize()
z drugiej strony zwraca rzeczywiste wymiary tekstu w pikselach.Możesz użyć
setTextSize(int unit, float size)
do określenia typu jednostki. Stałe wartości tego można znaleźć w klasie TypedValue, ale niektóre z nich to:źródło
ten problem występuje, ponieważ
getTextSize()
metoda zwraca rozmiar w pikselach w zależności od gęstości ekranu! aby uzyskać rzeczywisty rozmiar tekstu, użyj tego:mam nadzieję, że to rozwiąże :)
źródło
setTextSize(int unit, float size)
。jeśli ustawienie zmień rozmiar czcionki , coś powoduje wyświetlenie błędu , możesz zrobić jak :
źródło
DIP
?Kiedy próbujemy programowo setText () problem z getTextSize (), zwraca wartość w px zamiast sp / dp / dip i wiemy, że 1sp / dp = 1.5px (rozmiar ekranu = 240).
działa idealnie dla mnie lub możemy użyć współczynnika displaymatrix do px: sp / dp, a następnie zastąpić tę wartość 1,5f
źródło
Po długim czasie uderzyłem w to i ostatecznie rozwiązałem w ten sposób
utwórz folder dimen, taki jak ten res / values / Dimensions.xml
źródło
Krótko mówiąc, jeśli chcesz pomniejszyć rozmiar tekstu
Ponieważ getTextSize () zwraca UNIT_PX, powinniśmy użyć UNIT_PX
źródło
Rozwiązanie Kotlin
Aby ustawić użycie zasobu, po prostu użyj tego:
Aby zrobić to samo z wartością zasobu, dodaj tę właściwość rozszerzenia, aby znacznie łatwiej ustawić rozmiar tekstu
źródło
Dodanie dodatkowego smaku do tej odpowiedzi, ponieważ również wprowadziło trochę zamieszania. Państwo powinno być w stanie upuścić ten test do każdego
@RunWith(AndroidJUnit4.class)
testu masz w swoim projekcie (będziesz też trzeba dodać dimens do dimens.xml).Uwaga: wszystkie te testy kończą się powodzeniem
Największym wnioskiem, który znalazłem, jest
TextView.setTextSize(float)
zastosowanie skalowania czcionki , więc jeśli podasz wymiar, który jest już oznaczony jako SP zamiast DP, otrzyma skalowanie czcionki dwukrotnie .źródło