布局自动开关适用于我的2个设备的2个布局,但不适用于第3个布局。
我有2部Android手机(我的假设是ppi与dpi相同)
所以,我创建了以下布局来处理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 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
。
发生了什么事?
答案 0 :(得分:1)
我在Xperia Z上使用w500dp-land作为横向屏幕尺寸限定符。至少可以使用w600dp-land,而忽略w600dp-land。检查有意义的设备后: 根据{{3}}
,Xperia Z dp尺寸为360 * 592