Подтвердить что ты не робот

Настройка textSize программно

textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, getResources().getDimension(R.dimen.result_font));

Следующий код работает, но R.dimen.result_font воспринимается как гораздо большее значение, чем оно есть на самом деле. Его возможно около 18sp-22sp или 24sp в зависимости от размера экрана... Но размер, заданный здесь, составляет как минимум около 50 секунд. Может кто-то может порекомендовать что-нибудь?

4b9b3361

Ответ 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()));