Настройка textSize программно
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, getResources().getDimension(R.dimen.result_font));
Следующий код работает, но R.dimen.result_font
воспринимается как гораздо большее значение, чем оно есть на самом деле. Его возможно около 18sp-22sp или 24sp в зависимости от размера экрана... Но размер, заданный здесь, составляет как минимум около 50 секунд. Может кто-то может порекомендовать что-нибудь?
Ответы
Ответ 1
Вы должны изменить его на TypedValue.COMPLEX_UNIT_PX
, потому что getDimension(id)
возвращает значение размера из ресурсов и неявно, преобразованное в px.
textView.setTextSize(TypedValue.COMPLEX_UNIT_PX,
getResources().getDimension(R.dimen.result_font));
Ответ 2
Требование
Предположим, мы хотим программно установить текстовый файл из файла ресурсов.
Файл ресурсов размера (res/values /dimens.xml)
<resources>
<dimen name="result_font">16sp</dimen>
</resources>
Решение
Сначала получите значение dimen из файла ресурсов в переменную textSizeInSp.
int textSizeInSp = (int) getResources().getDimension(R.dimen.result_font);
Далее конвертировать 16 значение sp в равные пиксели.
для этого создайте метод.
public static float convertSpToPixels(float sp, Context context) {
return TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, sp, context.getResources().getDisplayMetrics());
}
Пусть задано TextSize,
textView.setTextSize(convertSpToPixels(textSizeInSp , getApplicationContext()));
Все вместе
int textSizeInSp = (int) getResources().getDimension(R.dimen.result_font);
textView.setTextSize(convertSpToPixels(textSizeInSp , getApplicationContext()));