Jeśli przypiszę wartość całkowitą, aby zmienić określony rozmiar tekstu TextView
używającego kodu Java, wartość zostanie zinterpretowana jako pixel ( px
).
Czy teraz ktoś wie, jak to przypisać sp
?
http://developer.android.com/reference/android/widget/TextView.html#setTextSize%28int,%20float%29
Przykład:
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 65);
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimension(R.dimen.my_text_size_in_sp));
Uzyskanie tego rozmiaru tekstu już spowoduje konwersję SP do PX, biorąc pod uwagę zarówno gęstość ekranu, jak i współczynnik skali tekstu.Za
DisplayMetrics
pomocą tegoscaledDensity
atrybutu można użyć obiektu do konwersji między pikselami a pikselami skalowanymi .źródło
may be adjusted in smaller increments at runtime based on a user preference for the font size
więc rozmiar czcionki zostanie wzięty pod uwagę.Czystsze i bardziej uniwersalne podejście jest
zdefiniuj rozmiar tekstu w
dimens.xml
pliku wres/values/
katalogu:a następnie zastosuj go do
TextView
:źródło
Na podstawie kodu źródłowego
setTextSize
:Buduję tę funkcję do obliczania dowolnego wymiaru na piksele:
Gdzie jednostka jest podobna
TypedValue.COMPLEX_UNIT_SP
.źródło
Domyślnie setTextSize, bez jednostek działa w SP (skaluje piksele)
źródło
Dzięki @John Leehey i @PeterH:
Chodzi o to, jeśli zdefiniujesz R.dimen.desired_sp do 25 w pliku dimen.xml
źródło
Gdy zaakceptowana odpowiedź nie działa (na przykład w przypadku programu Paint), możesz użyć:
źródło
źródło
COMPLEX_UNIT_PX
, musisz podzielić gęstość.To jest kod do konwersji formatu PX na SP . 100% działa
źródło
Po wypróbowaniu wszystkich rozwiązań i braku dających akceptowalne wyniki (być może dlatego, że pracowałem na urządzeniu z domyślnymi bardzo dużymi czcionkami), następujące rozwiązanie działało dla mnie (COMPLEX_UNIT_DIP = piksele niezależne od urządzenia):
źródło
Od poziomu 1 interfejsu API można użyć tej
public void setTextSize (float size)
metody.Z dokumentacji:
Możesz więc po prostu zrobić:
źródło