2

布局自动开关适用于我的 2 台设备的 2 种布局,但不适用于第 3 台。

我有 2 部 Android 手机(我的假设是这里的 ppi 与 dpi 相同)

  • HTC Desire - (480x800; 252 dpi; Android 2.2)
  • HTC Sensation - 长边 >600dp(540x960 像素;256 dpi;Android 4.0.4)
  • Sony Xperia Z - 长边大于 690dp(1080x1920 像素;443 dpi;Android 4.2.2)

因此,我创建了以下布局来处理 3 部手机的屏幕(我没有使用最小可用宽度sw<N>dp限定符,因为我的应用只支持横向视图;因此,我只关心屏幕的较长尺寸)

/res/layout/main.xml
/res/layout-w600dp/main.xml
/res/layout-w690dp/main.xml

/res/layout/main.xmlHTC Desire 和HTC Sensation的布局正确显示,/res/layout-w600dp/main.xml但 Xperia Z 的布局不正确(/res/layout/main.xml显示而不是/res/layout-w690dp/main.xml

我错过了什么?

我的应用程序面向 Android 4.0(所以我只查看 Android 3.2 及更高版本的屏幕尺寸限定符)

我想在运行时检查屏幕大小,然后选择适当的布局,但在这种情况下,将使用限定符,不是吗?

目前我的 manifest.xml:

...
<uses-sdk android:minSdkVersion="8"
        android:targetSdkVersion="14" />
    <supports-screens
            android:smallScreens="true"
            android:normalScreens="true" 
            android:largeScreens="true"
            android:xlargeScreens= "true"
            android:anyDensity="true" />
...

更新
既然我已经使用 DensityMetrics 来发现我手机屏幕的密度,它们实际上与 PPI 数据不同:

  • HTC Sensation - 240dpi
  • Xperia Z - 480dpi

所以 HTC Sensationa 和 Xperia Z 的尺寸都是 360dp x 640dp。我删除了 1 个布局并保留以下内容:

/res/layout/main.xml
/res/layout-w600dp/main.xml

当我运行我的应用程序时,HTC Sensation 仍然显示/res/layout-w600dp/main.xml布局,而 Xperia Z 仍然显示/res/layout/main.xml.

到底是怎么回事?

4

1 回答 1

1

我在 Xperia Z 上使用 w500dp-land 作为横向屏幕尺寸限定符。这至少有效,而 w600dp-land 被忽略。检查有意义的设备后:根据https://play.google.com/store/apps/details?id=com.sturnus.screeninfo,Xperia Z dp 尺寸为 360 * 592

于 2013-11-07T17:31:32.093 回答