Задайте размер текста в .xml или программно
У меня есть переменная at dimens.xml
<resources>
<dimen name="btn_text_size">12sp</dimen>
</resources>
И я могу использовать его в файле макета:
<TextView
android:textSize="@dimen/btn_text_size"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/dialog_tags_complete"
/>
или программно
tagButton.setTextSize(c.getResources().getDimension(R.dimen.tag_text_size));
Но эти 2 метода дают разные результаты. Я знаю, что getDimension
основаны на текущем DisplayMetrics, связанном с ресурсами.
Но что я должен сделать, чтобы сделать эти два способа одинаковыми?
Ответы
Ответ 1
setTextSize( float )
ожидает масштабированное значение пикселя. Итак, setTextSize( 12 )
даст вам желаемый результат. Тем не менее, getDimension()
и getDimensionPixelSize()
возвращают размер в единицах пикселей, поэтому вам нужно использовать вариант с типом setTextSize()
, указанный в единицах:
setTextSize( TypedValue.COMPLEX_UNIT_PX, getDimensionPixelSize( R.dimen.tag_text_size ) );
Ответ 2
tagButton.setTextSize(c.getResources().getDimensionPixelSize(R.dimen.tag_text_size));
это будет работать просто отлично:)
Вы также должны помнить, что textView имеет setTextSize (int unit, float size), который должен использоваться при настройке размера из кода, но не из xml dimen.
Ответ 3
В настоящее время у меня одно и то же. Установил размер в dimens.xml и применил его программно, что в 3 раза больше, чем при настройке через xml.
Я также проверил:
TextView.getTextSize() = 92f
getResources().getDimension(R.dimen ...) = 92f
TextView.setTextSize(92)!= TextView с размером от XML, другие флаги, такие как TypedValue.COMPLEX_UNIT_PX, делают его еще большим.
По умолчанию setTextSize применяет COMPLEX_UNIT_SP по умолчанию btw. Так что, опять-таки, API Android несовместим, поэтому настройка программно только и адаптация размеров, поэтому они подходят, будет моим решением.
Редактирование: установка размера текста программно в соответствии с Galaxy Note 2 (4.4.2) vs Примечание 4 (5.0.1) приводит к совершенно другому результату -.-