В sizes.xml у меня есть:
<dimen name="text_medium">18sp</dimen>
Во время выполнения я получаю это значение и устанавливаю размер текста для текстового представления:
int size = context.getResources().getDimensionPixelSize(R.dimen.text_medium);
textView.setTextSize(size).
На 10-дюймовом планшете (1280 х 800) все нормально; но на телефоне (800 x 480) текстовое представление имеет очень крупный шрифт. На планшете размер равен 18; по телефону 27.
Если я установил размер вручную:
textView.setTextSize(size)
размер нормальный на обоих девайсах.
android
textview
dimensions
Юра Шинкарев
источник
источник
TypedValue.COMPLEX_UNIT_SP
вместо этого?Resources.getDimension()
Метод возвращает значение, которое уже умножено на соответствующую метрикуОба метода getDimensionPixelSize () и getDimension () используют плотность экрана для вычисления пикселей. Плотность экрана вашего телефона, очевидно, равна hdpi (240 точек на дюйм), поэтому для преобразования dp в sp используется масштаб 1,5. Простая математика 18 * 1,5 = 27.
Кажется, что у вашего планшета плотность mdpi (160dpi), поэтому масштаб всего 1: 1.
Но если сравнить реальный размер обоих текстов, он должен быть одинаковым.
Лучший способ - просто создать два файла sizes.xml, один в папке значений для телефона, а другой в values-sw600dp для планшетов (вы также можете использовать папку values-sw720dp-land для хранения размеров 10-дюймовых планшетов в альбомной ориентации).
Вы можете узнать больше о размерах в Android по адресу: http://android4beginners.com/2013/07/appendix-c-everything-about-sizes-and-dimensions-in-android/
источник
Вы можете использовать sdp (масштабируемые пиксели плотности) https://github.com/intuit/sdp вместо dp, это определенно спасет вашу жизнь
источник