问题描述
我正在编写一个 Android 游戏并同时在两台设备上进行测试:
- 华为 P10 Lite:5.2"、1920x1080、424dpi、xhdpi。
- 华为 P40 Pro: 6.58"、2640x1200、441dpi、xhdpi。
这两种设备完全不同,因为它们屏幕尺寸和分辨率不同,但在 dpi 和 dpi bucket 上没有区别; 两者都是 xhdpi。
这意味着无论我创建的 dimen 文件(dimen-mdpi、dimen-hdpi...),任何图形元素在两部手机中看起来都一样,这完全打破了小手机的布局和比例强>.
我以此作为桶分类的参考:
解决方法
好吧,dpi 与分辨率有关,而不是屏幕尺寸。如果您想为屏幕尺寸而不是屏幕分辨率创建资源,则应使用 smalest width qualifiers。
根据文档:
一个 DIP 是一个像素 大约 160 dpi 的屏幕(例如 240x320、1.5"x2" 的屏幕), 提供系统显示的基线。因此在 160dpi 的屏幕上 此密度值为 1;在 120 dpi 的屏幕上,它将是 0.75;等
因此,如果我理解正确,您可以通过以下方式从像素转换为 =AND(ISNUMBER(RIGHT(A1,6)*1),CODE(A1)>64,CODE(A1)<91,SWITCH(LEN(A1),7,1,8,AND(CODE(MID(A1,2,1))>64,CODE(MID(A1,1))<91),0))
:dp
。在这种情况下,以 dp 为单位的设备宽度公式如下:pixelSize / dip / 160
.
- 以 dp 为单位的 P10 宽度:1080 / (424 / 160) = 407.54
- 以 dp 为单位的 P40 宽度:1200 / (441 / 160) = 435.37
看来其他人也来过这个conclusion