Получить размер из XML и установить размер текста во время выполнения


101

В sizes.xml у меня есть:

<dimen name="text_medium">18sp</dimen>

Во время выполнения я получаю это значение и устанавливаю размер текста для текстового представления:

int size = context.getResources().getDimensionPixelSize(R.dimen.text_medium);
textView.setTextSize(size).

На 10-дюймовом планшете (1280 х 800) все нормально; но на телефоне (800 x 480) текстовое представление имеет очень крупный шрифт. На планшете размер равен 18; по телефону 27.

Если я установил размер вручную:

textView.setTextSize(size)

размер нормальный на обоих девайсах.

Ответы:


298
<dimen name="text_medium">18sp</dimen>

Установите размер в коде:

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

7
Я не знаю насчет ОП, но это был ответ, который я искал. Я использовал COMPLEX_UNIT_DP, думая, что мне нужно указать тип ввода, а не тип вывода.
HenryAdamsJr

когда я получаю свой размер шрифта (определенный в sp), я получаю 60. Когда я устанавливаю его обратно с помощью OMPLEX_UNIT_PX и снова получаю, я получаю 70. Кажется, здесь не все ясно
Gleichmut

2
Почему я не могу использовать размер текста TypedValue.COMPLEX_UNIT_SPвместо этого?
dphans

3
@dphans Resources.getDimension()Метод возвращает значение, которое уже умножено на соответствующую метрику
pkuszewski

2
@pkuszewski Вау, это так сбивает с толку.
Big_Chair

4

Оба метода getDimensionPixelSize () и getDimension () используют плотность экрана для вычисления пикселей. Плотность экрана вашего телефона, очевидно, равна hdpi (240 точек на дюйм), поэтому для преобразования dp в sp используется масштаб 1,5. Простая математика 18 * 1,5 = 27.

Кажется, что у вашего планшета плотность mdpi (160dpi), поэтому масштаб всего 1: 1.

Но если сравнить реальный размер обоих текстов, он должен быть одинаковым.

Лучший способ - просто создать два файла sizes.xml, один в папке значений для телефона, а другой в values-sw600dp для планшетов (вы также можете использовать папку values-sw720dp-land для хранения размеров 10-дюймовых планшетов в альбомной ориентации).

Вы можете узнать больше о размерах в Android по адресу: http://android4beginners.com/2013/07/appendix-c-everything-about-sizes-and-dimensions-in-android/


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.