Android中字体的物理大小(以点为单位)
我有两个设备-HTC纹身和索尼爱立信Xperia X10。一个有145个新闻部,另一个有245个新闻部 当我以点为文本视图指定字体大小时,如下所示:Android中字体的物理大小(以点为单位),android,text,fonts,size,points,Android,Text,Fonts,Size,Points,我有两个设备-HTC纹身和索尼爱立信Xperia X10。一个有145个新闻部,另一个有245个新闻部 当我以点为文本视图指定字体大小时,如下所示: textView.setTextSize(TypedValue.COMPLEX_UNIT_PT, 6.5f); 我在这两个设备上得到不同物理大小的文本。在245 DPI上,文本几乎不可读 现在,“pt”的大小应该是物理的。也就是说,在我的测试中,两个文本块应该有相同物理高度的字母。事实并非如此 这里有什么问题 谢谢你的帮助, Yuri.单位是点,
textView.setTextSize(TypedValue.COMPLEX_UNIT_PT, 6.5f);
我在这两个设备上得到不同物理大小的文本。在245 DPI上,文本几乎不可读
现在,“pt”的大小应该是物理的。也就是说,在我的测试中,两个文本块应该有相同物理高度的字母。事实并非如此
这里有什么问题
谢谢你的帮助,
Yuri.单位是点,不会根据密度进行缩放。对于您想要的非文本
dip
(或dp
),它们是与密度无关的像素。这些将根据密度进行缩放。对于文本,您需要
,它将根据密度和用户首选的字体大小进行缩放
这里有一些关于它的信息,也散布在Android文档的其他地方
更新:这里是对每个尺寸单位的描述,正如Yuri正确指出的那样,这确实表明pt
在物理屏幕上应始终为1/72英寸。它似乎不是这样工作的,答案就是使用dp
和sp
-如果你想向用户公开类似点的内容,只需做一些数学运算(dp
可以假设在160dpi屏幕上为1px,即1/160英寸)
事实上,只要底层设备给出正确的显示指标,点总是有效的 例如,我测试了五台设备:
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纹身和HTC英雄为Android API提供了正确的显示信息
这就是为什么点在不同的设备上有不同的物理大小(但不是全部)
我发现粗略缩放字体/图像的唯一方法是假设所有内容都是160 DPI,并使用DisplayMetrics#scaledDensity-这是错误的,但我看不到任何其他方法。根据文档:“点-基于屏幕的物理大小的1/72英寸。”无论密度如何。不管怎样。就像一毫米在任何显示器上都是一毫米一样。1/72英寸等于1/72英寸,无论需要多少像素。让我解释一下我的选择。点是许多应用程序的标准字体单位。用户不希望基于某些新的度量单位指定字体大小。分数是标准的和普通的。在您的电脑浏览器中,使用Microsoft Word、记事本和Mac应用程序。是的,文档读起来好像pt的物理尺寸应该始终相同,这有点误导。但dp和sp似乎是推荐的机组。1dp在160dpi屏幕上是1px(即1/160英寸),因此,如果您想显示与用户等效的点,只需进行简单的数学转换。其他方法可能是使用设备数据库,至少对于最受欢迎的。有人知道这是否在6年后效果更好吗?请参阅我关于点数的博客文章?。这加上下面的答案就是你需要知道的全部!