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"大小应该是物理的.即,在我的测试中,两个文本块都应该具有相同物理高度的字母.事实并非如此.
这可能有什么不对?
谢谢你的帮助,尤里.
该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
实际上,只要底层设备提供正确的显示指标,点就始终有效.
例如,我测试了五个设备:
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 - 这是错误的,但我没有看到任何其他方式.