布局自动开关适用于我的 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.xml
HTC 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
.
到底是怎么回事?