与屏幕实际尺寸无关,取决于 ROM 指定的像素密度与屏幕真实像素密度之间的关系。
编译 ROM 时会指定像素密度的。只能指定为以下几个值:
ldpi: 120ppi (mdpi x 0.75)
mdpi: 160ppi (android 基准 ppi, 1dp=1px)
tvdpi: 213.333ppi (xhdpi / 1.5)
hdpi: 240ppi (mdpi x 1.5)
xhdpi: 320ppi(mdpi x 2)
xxhdpi: 480ppi(mdpi x 3)
在生产 android 手机的时候,应当尽量选择与这些 ppi 相接近的像素密度。
屏幕的真实 ppi 如果完全等于这几个指定的 ppi,并且被指定为确定的 ppi,那么相同 sp 的字体,最终显示的物理大小相同。
但如果使用的不是以上一个标准 ppi,那么最终显示的效果与真实大小有差异,具体计算方式如下:
假如屏幕 A 是 440ppi 的,ROM 被指定为 480 ppi,那么屏幕显示的实际上是 480/440=1.09 倍的真实大小。
而另外一块屏幕 B,假定是 340 ppi,ROM 被指定为 320 ppi,那么屏幕显示的实际上是 320/340=0.94 倍的真实大小。
因为 0.94 < 1.09,所以,这块 340ppi 的屏幕 B,实际的字体显示尺寸反而比 440ppi 的屏幕 A 更小。
假定有一块屏幕 C,像素密度是 280 ppi,ROM 被指定为 320 ppi,那么屏幕显示的实际上是 320/280=1.14 倍的真实大小。
因为 1.14 > 1.09 ,这块 280ppi 的屏幕 C,实际的字体显示尺寸比 440ppi 的屏幕 A 更大。
至于手机的屏幕的物理尺寸,它只决定了总共含有多少个 sp,但不决定每个 sp 的大小。决定每个 sp 大小的是手机屏幕的真实像素密度,以及这款 ROM 被编译时指定的像素密度(对 android 应用程序来说,像素密度只有指定的那几个)。