Android 尝试定义设备应使用的布局

Android 尝试定义设备应使用的布局,android,android-layout,Android,Android Layout,我试图了解哪种布局使用哪种设备 例如,我有不同的布局: 布局 布局图-sw600dp 布局图-sw720dp Nexus 7“(800x1280)使用布局-sw600dp 三星GTp3100 7“(600x1.024)使用布局-sw600dp 三星Tab 10.1(1280x800)使用布局-sw720dp 索尼XPERIA S 4.3(1280x720)使用布局 你们能“用你们的话”解释一下为什么XPERIA S不使用sw600dp或sw720dp吗? SW!=最小宽度?所以XPERIA

我试图了解哪种布局使用哪种设备

例如,我有不同的布局:

  • 布局
  • 布局图-sw600dp
  • 布局图-sw720dp
Nexus 7“(800x1280)使用布局-sw600dp

三星GTp3100 7“(600x1.024)使用布局-sw600dp

三星Tab 10.1(1280x800)使用布局-sw720dp

索尼XPERIA S 4.3(1280x720)使用布局

你们能“用你们的话”解释一下为什么XPERIA S不使用sw600dp或sw720dp吗? SW!=最小宽度?所以XPERIA S的最小值是720。它应该使用sw720或sw600,对吗?还是我错了

我已经阅读了大量的文档,但不明白为什么会发生这种情况


非常感谢。

最小宽度限定符主要指屏幕大小,而不是物理像素

例如,使用
sw720dp
意味着设备的最小屏幕宽度必须为720
dp
(与设备无关的像素)-这不是720个物理像素。从文档中

密度无关像素相当于160 dpi屏幕上的一个物理像素,这是系统为“中等”密度屏幕假设的基线密度

索尼XPERIA S 4.3的物理宽度是2.5英寸,但我不知道其中有多少是屏幕的实际宽度

为了便于计算,让我们假设屏幕覆盖了整个宽度……在本例中,为了计算
dpi
宽度,我们只需使用
720/2.5=288dpi

dp
的文档中

dp单元到屏幕像素的转换很简单:px=dp*(dpi/160)

重新排列上面的公式以计算
dp
我们这样做

dp = px / (dpi / 160)
…这为我们提供了
dp
中的宽度(以及必要的最小宽度限定符)


简而言之,答案是,索尼XPERIA S 4.3可能有一个高密度屏幕(就其尺寸而言),但它不是一个大屏幕。

谢谢。通过以下代码找到了答案:
float density=getResources().getDisplayMetrics().density;float-dpHeight=outMetrics.heightPixels/density;float-dpWidth=outMetrics.widthPixels/density;
顺便问一下,有没有公式可以得到这个值“2.5”,与我在
getResources()中得到的值相同。getDisplayMetrics().density;
?@SergiCastellsaguéMillán:您可以使用
DisplayMetrics
xdpi
ydpi
字段来获得每个维度的实际
dpi
。然后,计算物理屏幕大小将只是我在回答中用于计算
dpi
的公式的重新安排(例如,
720/2.5=288 dpi
px/size=dpi
)因此
px/dpi=size
。从
DisplayMetrics
中,您将使用
widthPixels/xdpi
获得屏幕的物理宽度。
720 / (288 / 160) = 400dp