3

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

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

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

我在这两个设备上得到不同物理大小的文本。在 245 DPI 上,文本几乎无法阅读。

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

这里有什么问题?

谢谢你的帮助,尤里。

4

2 回答 2

6

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

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

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

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

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

于 2010-08-03T11:35:24.613 回答
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 - 这是错误的,但我没有看到任何其他方式。

于 2010-08-05T11:28:20.047 回答