Android中字体的物理大小

时间:2010-08-03 11:28:48

标签: android text fonts size points

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

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

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

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

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

这里有什么不妥?

感谢您的帮助, 由里。

2 个答案:

答案 0 :(得分:6)

pt单位是分数,不会根据密度进行缩放。对于非文本,您需要dip(或dp),它们是密度无关的像素。这些将根据密度进行缩放。对于文本,您需要sp,它将根据密度进行缩放,但也会根据用户的首选字体大小进行缩放。

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

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

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

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

答案 1 :(得分: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 - 这是错误的,但我没有看到任何其他方式。