SP 和 DP 似乎不像您预期的那样工作。
DP应该是“显示独立”的,SP也是这样描述的;但可以缩放(大概是通过“缩放”命令)。
但是,它们并不像您预期的那样工作。
例如,我有两部设备,一部 320x480 手机和一部 Nexus;这是 800x1280 但将自己描述为 sw600 (我不知道为什么)。
为了查看发生了什么,我在视图中添加了一个文本视图,它由 60 个“X”字符组成(之所以选择这些字符是因为它们看起来与等宽字符相同)。
textView textSize 设置为 10dp,其中 60 个完全填满了 Nexus 屏幕。
但是,它们在手机上的显示尺寸完全相同,几乎形成了两条线。
因此,DP 似乎不是独立于显示的;但仅描述了每个字符将最多给出的(近似)像素数。
在 SP 中定义维度没有区别。
这不是很有帮助 - 我期待应用某种形式的缩放,所以我可以在我的手机上选择合适的尺寸,它会为 Nexus 缩放。
例如,如果我的文本行大约有 30 个字符长,并且我希望它在屏幕上占满一整行,我会将其定义为 10dp;每个 dp 将是一个像素(大约)。然后,当它在 Nexus 上绘制时,每个 dp 将是两个像素,它会出现两倍的大小。
据我所知,这不是它的工作方式;这让它变得毫无用处。
我唯一的解决方案,它不是一个优雅的解决方案,是只使用 dimens.xml 文件中的尺寸,并有六个,每个常用宽度(240,320,480,600,720,800 -任何更高的东西都可以自行解决),然后设计我的代码以适合 Nexus,并使用我编写的电子表格来缩放 dimens.xml 中的任何值以获得常见宽度。
这是一种痛苦;但它有效。
除非我用错了,否则安卓系统就是坏了。