Физический размер шрифта в пунктах в Android - PullRequest
3 голосов
/ 03 августа 2010

У меня два устройства - HTC Tattoo и Sony Ericsson Xperia X10.Один имеет 145 DPI, другой 245 DPI.

Когда я указываю размер шрифта для TextView в точках, например:

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

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

Теперь размер "pt" должен быть физическим.Т.е. в моем тесте оба текстовых блока должны иметь буквы одинаковой физической высоты.Что не так.

Что здесь может быть не так?

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

Ответы [ 2 ]

6 голосов
/ 03 августа 2010

Единица pt - это точки, которые не будут масштабироваться в зависимости от плотности. Для не-текста вы хотите dip (или dp), которые не зависят от плотности пикселей. Они будут масштабироваться в зависимости от плотности. Для текста вы хотите <a href="http://developer.android.com/reference/android/util/TypedValue.html#COMPLEX_UNIT_SP" rel="noreferrer">sp</a>, который будет масштабироваться в соответствии с плотностью, а также в соответствии с предпочтительным размером шрифта пользователя.

Здесь есть небольшая информация, а также разбросанная в других местах в документации по Android.

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

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

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

5 голосов
/ 05 августа 2010

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

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

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 - что неверно, но я не вижу другого пути.

...