我有两种用于不同屏幕尺寸的布局:

layout
layout-w580dp


显示纵向和横向的度量日志:

DisplayMetrics{density=1.3312501, width=800, height=1280, scaledDensity=1.5841876, xdpi=216.0, ydpi=216.0}
DisplayMetrics{density=1.3312501, width=1280, height=800, scaledDensity=1.5841876, xdpi=216.0, ydpi=216.0}


Potrait方向为800/1.5841876=504dp,因此必须使用layout文件夹中的资源。
横向为1200/1.5841876=704dp,因此必须使用layout-w580dp文件夹中的资源。
但是,两个方向的资源都是从layout-w580dp文件夹获得的。
是什么原因导致该问题?

最佳答案

根据Supporting Multiple Screens,从dp转换为物理像素的公式为px = dp * (dpi / 160)。由于我们要以相反的方向进行转换,因此需要求解dpdp = px * 160 / dpi。对于您的两个示例,我们具有以下值和计算:


px = 800(宽度),dpi = 216(xdpi)dp = px * 160 / dpi = 800 * 160 / 216 = 592.59
px = 1280(宽度),dpi = 216(xdpi)dp = px * 160 / dpi = 1280 * 160 / 216 = 948.15


在这两种情况下,宽度均大于580 dp。

10-08 17:25