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

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

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

Solutions Collecting From Web of "Настройка textSize программно"

Вы должны изменить его на TypedValue.COMPLEX_UNIT_PX потому что getDimension(id) возвращает значение TypedValue.COMPLEX_UNIT_PX из ресурсов и неявно преобразуется в px .

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

требование

Предположим, мы хотим программно установить текстовый файл из файла ресурсов.

Файл ресурсов измерения (res / values ​​/ dimens.xml)

 <resources> <dimen name="result_font">16sp</dimen> </resources> 

Решение

Сначала получите значение размера из файла ресурсов в переменную «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()));