使用可用的屏幕宽度限定符w <n> dp </n>支持3种不同的屏幕尺寸

时间:2013-08-22 08:41:20

标签: android-layout screen-size android sony-xperia

布局自动开关适用于我的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 - 较长的一面是&gt; 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和/res/layout-w600dp/main.xml适用于HTC Sensation但不适用于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

发生了什么事?

1 个答案:

答案 0 :(得分:1)

我在Xperia Z上使用w500dp-land作为横向屏幕尺寸限定符。至少可以使用w600dp-land,而忽略w600dp-land。检查有意义的设备后: 根据{{​​3}}

,Xperia Z dp尺寸为360 * 592