Отримайте розмір від XML та встановіть розмір тексту під час виконання


101

У dimens.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)

розмір нормальний для обох пристроїв.

Відповіді:


297
<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 (240dpi), тому для перетворення dp в sp використовується 1,5 масштаб. Проста математика 18 * 1,5 = 27.

Здається, що щільність планшетного ПК становить mdpi (160dpi), тому масштаб становить всього 1: 1.

Але якщо порівнювати реальний розмір обох текстів, він повинен бути однаковим.

Найкращий спосіб - просто створити два файли dimens.xml, один у папці значень для телефону, а інший у папці значень-sw600dp для планшетів (ви також можете використовувати папку значень-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.