W dimens.xml mam:
<dimen name="text_medium">18sp</dimen>
W czasie wykonywania otrzymuję tę wartość i ustawiam rozmiar tekstu widoku tekstu:
int size = context.getResources().getDimensionPixelSize(R.dimen.text_medium);
textView.setTextSize(size).
Na tablecie 10 ″ (1280 x 800) wszystko jest w porządku; ale na telefonie (800 x 480) widok tekstu ma bardzo dużą czcionkę. Na tablecie rozmiar wynosi 18; przez telefon jest 27.
Jeśli ustawię rozmiar ręcznie przez:
textView.setTextSize(size)
rozmiar jest normalny na obu urządzeniach.
android
textview
dimensions
Yura Shinkarev
źródło
źródło
TypedValue.COMPLEX_UNIT_SP
?Resources.getDimension()
Metoda zwraca wartość, która jest już pomnożona przez odpowiednią metrykęObie metody getDimensionPixelSize () i getDimension () używają gęstości ekranu do obliczania pikseli. Gęstość ekranu twojego telefonu to oczywiście hdpi (240 dpi), więc używa skali 1,5 do konwersji dp na sp. Prosta matematyka 18 * 1,5 = 27.
Wygląda na to, że gęstość tabletu wynosi mdpi (160 dpi), więc skala wynosi tylko 1: 1.
Ale jeśli porównasz rzeczywisty rozmiar obu tekstów, powinien być taki sam.
Najlepszym sposobem jest po prostu utworzenie dwóch plików dimens.xml, jeden w folderze wartości dla telefonu, a drugi w value-sw600dp dla tabletów (możesz również użyć folderu values-sw720dp-land do przechowywania wymiarów 10-calowych tabletów w orientacji poziomej).
Więcej o wymiarach w Androidzie można przeczytać pod adresem : http://android4beginners.com/2013/07/appendix-c-everything-about-sizes-and-dimensions-in-android/
źródło
Możesz użyć sdp (skalowalne piksele desnsity) https://github.com/intuit/sdp zamiast dp, to na pewno uratuje ci życie
źródło