【问题标题】:Physical size of font in points in AndroidAndroid中字体的物理大小(以磅为单位)
【发布时间】:2010-08-03 11:28:48
【问题描述】:

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

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

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

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

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

这里有什么问题?

感谢您的帮助, 尤里。

【问题讨论】:

标签: android text fonts size points


【解决方案1】:

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

这里有一些关于它的信息,也散布在 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

【讨论】:

  • 根据文档:“点 - 基于屏幕物理尺寸的 1/72 英寸。”不管密度如何。无所谓。就像在任何显示器上一毫米总是一毫米一样。 1/72 英寸就是 1/72 英寸,不管它需要多少像素。让我解释一下我的选择。点是许多应用程序的标准字体单位。用户不想根据一些新的测量单位来指定他们的字体大小。点是标准的和司空见惯的。在您的 PC 浏览器、Microsoft Word、记事本和 Mac 应用程序中。
  • 是的,文档确实读起来好像 pt 应该始终是相同的物理大小,这有点误导。但是 dp 和 sp 似乎确实是推荐的单位。 1dp 在 160dpi 屏幕上是 1px(即它是 1/160 英寸),所以如果你想暴露一个与用户等效的点,这只是一个简单的数学转换。
【解决方案2】:

实际上,只要底层设备提供正确的显示指标,点总是有效的。

例如,我测试了五台设备:

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 - 这是错误的,但我没有看到任何其他方式。

【讨论】:

  • 其他方式可能是使用设备数据库,至少对于最流行的。
  • 有谁知道这在 6 年后效果会更好吗?
猜你喜欢
  • 1970-01-01
  • 2011-02-26
  • 2018-10-08
  • 2011-08-20
  • 2010-11-06
  • 2011-08-17
  • 2013-04-26
  • 1970-01-01
  • 2016-06-10
相关资源
最近更新 更多