Android中字体的物理大小

Yur*_*kov 3 size fonts android text points

我有两个设备 - HTC Tattoo和索尼爱立信Xperia X10.一个有145 DPI,另一个有245 DPI.

当我以点为单位指定TextView的字体大小时,如下所示:

textView.setTextSize(TypedValue.COMPLEX_UNIT_PT, 6.5f);
Run Code Online (Sandbox Code Playgroud)

我在这两个设备上获得了不同的文本物理大小.在245 DPI上,文本几乎不可读.

现在,"pt"大小应该是物理的.即,在我的测试中,两个文本块都应该具有相同物理高度的字母.事实并非如此.

这可能有什么不对?

谢谢你的帮助,尤里.

Nic*_*ick 6

pt单元是一个点,根据密度不会规模.对于您想要的非文本dip(或dp),它们是密度无关的像素.这些将根据密度进行缩放.对于您想要的文本,sp它将根据密度进行缩放,但也可以根据用户的首选字体大小进行缩放.

这里有一些信息,也分散在Android文档的其他地方.

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

更新:这里是每个尺寸单位的描述,正如Yuri正确指出的那样,它确实表明pt在物理屏幕上应始终为1/72英寸.它似乎没有那样工作,答案只是使用dpsp- 如果你想向你的用户公开点数,只做一些数学(dp可以假设在160dpi屏幕上是1px,即1/160英寸).

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


Yur*_*kov 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
Run Code Online (Sandbox Code Playgroud)

可以看出,只有HTC Tattoo和HTC Hero为Android API提供了正确的显示信息.

这就是为什么点在不同设备上具有不同的物理尺寸(但不是全部).

我发现大致缩放字体/图像的唯一方法是假设一切都是160 DPI并使用DisplayMetrics #scaledDensity - 这是错误的,但我没有看到任何其他方式.