规模无关像素

5

我不知道如何将其转换为像素单位。例如,如果我在160 dpi设备上将字体大小分配为10sp,那么我的字体大小是多少像素?或者,如果我在240 dpi设备上将字体大小分配为10sp,那么我的字体大小是多少像素?

2个回答

7
他们与dip相同,但它们还考虑了用户在设备上设置的字体缩放因素。因此,如果用户将字体大小设置为“normal”,那么它就像dip一样。如果存在字体缩放因素,则可以从DisplayMetrics.scaledDensity获取整个缩放密度。

(我不得不承认,我刚刚试图在我的Android手机全局设置中寻找一些“字体大小”选项,但我找不到它,所以我想知道它现在是否有用。我错过了什么吗?)


1
所以,sp 等于 dp * DisplayMetrics.scaledDensity 吗?如果字体大小设置为“normal”,那么我可以假设 DisplayMetrics.scaledDensity 为1.0。 - AechoLiu
@Toro mm我从来没有检查过,但根据ref所说,我认为sp = scaledDensity = text_scaling * dp。 - bigstones
1
至少在原生ICS上,您可以使用“设置>显示>字体大小”或“设置>辅助功能>大号文字”来更改字体大小(前者允许您从菜单中选择[小号、正常、大号、巨型]中的任何一个;后者只是一个复选框,用于在正常和巨型之间切换)。 - John Mellor
@bigstones,并非所有的ROM都允许你更改字体大小,但正如John所说,至少原生ICS是可以的。 - kabuko
1
更改字体偏好设置的选项仅在Android 4.0中提供。因此,它取决于所使用的操作系统。@toro:不要假设-Touchwiz没有普通的小号和中等大号之间的选项。相反,它有6个选项(比原生Android多两个)。 - Martin

0

这取决于设备设置的屏幕密度。您可以使用以下方法获取它:

screenDensity = this.getResources().getDisplayMetrics().density;

通过将屏幕密度和dp或sp大小相乘,您可以获得实际像素大小。例如,在320x240设备上,屏幕密度约为0.75,而在HTC Desire HD和Galaxy Tab上为1.5,即使它们具有不同的分辨率并且可能没有相同的dpi。


我认为sp和dp不同,并且我仍然无法从你的回答中清楚地了解sp的工作原理。 - AechoLiu
sp 将考虑用户的比例偏好,这意味着如果用户想要比原来大 20% 的字体,将会在字体的 dp 单位上添加。 - Lumis
正如@bigstones所指出的那样:它是scaledDensity——density会给你dp而不是sp。自Android 4以来,它们不再相同。 - Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接