У меня есть файл ресурсов dimens.xml с таким содержимым (для теста):
<resources>
<dimen name="tab_padding">16dp</dimen>
<dimen name="title_text_size">20sp</dimen>
<dimen name="row_text_size">17sp</dimen>
</resources>
С использованием напрямую в xml-файле макета все хорошо, но возникают проблемы при программной верстке выражениями вида:
txtView.setTextSize(getResources().getDimension(R.dimen.row_text_size));
Отладка показала, что проблема в функции
getDimension(), которая все измерения
увеличивает в 1,5 раза. В табло Expressions я получил такие результаты (сравните с изначальными значениями в файле ресурсов):
getResources().getDimension(R.dimen.tab_padding) = 24
getResources().getDimension(R.dimen.title_text_size) = 30
getResources().getDimension(R.dimen.row_text_size) = 25,5Так в чем же проблема? Кто-нибудь слышал про подобное?
P.S. У меня была гипотеза, что android так криво пересчитывает sp в dp. Как видите по файлу я уже начал экспериментировать с единицами измерения, но и явное введение dp тоже ничего не прояснило :(
Решение! Благодаря наводке от
one pavel понял, что пересчет происходит в единицу px. Т.е. в моем случае достаточно сделать:
txtView.setTextSize(
TypedValue.COMPLEX_UNIT_PX,
getResources().getDimension(R.dimen.row_text_size));