2010-08-03 2 views
3

У меня есть два устройства - HTC Tattoo и Sony Ericsson Xperia X10. У одного есть 145 DPI, другой 245 DPI.Физический размер шрифта в точках в Android

Когда я задать размер шрифта для TextView в точках, как это:

textView.setTextSize(TypedValue.COMPLEX_UNIT_PT, 6.5f); 

я получаю различный физический размер текста на этих двух устройств. В 245 DPI текст едва читаем.

Теперь размер «pt» должен быть физическим. I.e., в моем тесте оба текстовых блока должны иметь буквы одинаковой физической высоты. Это не так.

Что может быть неправильным здесь?

Спасибо за помощь, Юрий.

+0

См. Мое сообщение в блоге относительно определения размера точки http://systemdotrun.blogspot.co.uk/2014/09/whats-point-in-font-sizing.html ?. Это плюс ответ ниже - все, что вам нужно знать! http://stackoverflow.com/a/3414215/236743 – Dori

ответ

5

На самом деле, точки всегда работать, когда основные устройства дает правильные показатели дисплея.

Например, я проверил пять устройств:

NAME  OS metrics.ydpi REAL_DPI DDPI SD 
XPERIA 1.6 159.49677  325  240 1.5 
Liquid 1.6 263.8958  285  240 1.5 
Tattoo 1.6 145.14067  match  120 0.75 
Hero  1.5 179.29352  match  -  1.0 
Galaxy 1.6 160.41878  180  160 1.0 

Как можно видеть, только HTC Tattoo и HTC Hero дать правильную информацию для отображения Android API.

Именно поэтому точки имеют разные физические размеры на разных устройствах (не все).

Единственный способ, который я нашел, чтобы грубо масштабировать шрифты/изображения, состоит в том, чтобы считать все 160 DPI и использовать DisplayMetrics # scaledDensity - что неправильно, но я не вижу другого способа.

+0

Другим способом может быть использование базы данных устройства, по крайней мере, для самых популярных. – southerton

+0

Кто-нибудь знает, работает ли это лучше 6 лет спустя? – user3175580

6

Блок pt - это точки, которые не будут масштабироваться в соответствии с плотностью. Для нетекстовых вы хотите dip (или dp), которые являются независимыми от плотности пикселями. Они будут масштабироваться в соответствии с плотностью. Для текста вы хотите sp, который будет масштабироваться в соответствии с плотностью, но также в соответствии с предпочтительным размером шрифта пользователя.

У этой информации есть информация, а также дополнительная информация о других документах для Android.

http://developer.android.com/guide/practices/screens_support.html#screen-independence

UPDATE: здесь приведено описание каждой из единиц измерения, которые, как Юрий справедливо указывает, что позволяет предположить, pt всегда должна быть 1/72 дюйма на физическом экране. Кажется, что это работает не так, и ответ заключается только в том, чтобы использовать dp и sp - если вы хотите выставить что-то вроде очков своему пользователю, просто выполните некоторые математические вычисления (dp можно считать 1px на экране 160 точек на дюйм , т. е. 1/160 дюйма дюйма).

http://developer.android.com/guide/topics/resources/more-resources.html#Dimension

+0

Согласно документу: «Точки - 1/72 дюйма в зависимости от физического размера экрана». Независимо от плотности. Ничего. Точно так же, как миллиметр всегда миллиметр на любом дисплее. 1/72 дюйма составляет 1/72 дюйма, независимо от того, сколько пикселей он займет. Позвольте мне объяснить о моем выборе. Точки являются стандартным шрифтом для многих приложений.Пользователи не хотят указывать размер шрифта на основе новой единицы измерения. Очки являются стандартными и обычными. В браузере ПК, приложениях Microsoft Word, Notepad и Mac. –

+0

Да, документация читается так, как будто pt всегда должен быть одного и того же физического размера, это немного вводит в заблуждение. Но dp и sp действительно кажутся рекомендуемыми единицами. 1dp - 1px на экране 160 dpi (т. Е. Составляет 1/160 дюйма), поэтому, если вы хотите выставить точки, эквивалентные вашим пользователям, это будет просто математическое преобразование. – Nick

 Смежные вопросы

  • Нет связанных вопросов^_^