在layout-xlarge-land文件夹中保留布局xml文件时,应用程序无法启动

时间:2012-08-29 05:59:02

标签: android android-layout

我正在创建一个针对仅限横向模式的平板电脑用户的应用。因此,我在res中创建了一个名为layout-xlarge-land的文件夹,并将所有layout xml个文件放入其中,并将layout folder保留为空。我还在清单文件中设置了支持屏幕属性

<supports-screens
    android:anyDensity="true"
    android:largeScreens="true"
    android:xlargeScreens="true"
    android:normalScreens="false"
    android:smallScreens="false" />

我还将所有活动的方向设置为横向

activity
        android:name=".HomeActivity"
        android:label="@string/title_activity_main" 
        android:screenOrientation="landscape">
    </activity>

当我启动应用程序时,它不会开始显示意外停止的消息。

但是,当我将所有layout xml个文件放入layout folder时,我的应用程序运行正常。

为什么会出现这种行为?在我看来Android system应首先查看layout-xlarge-land文件夹以获取用户界面。如果没有找到,那么请查看'布局文件夹'。 有人可以解释我是对还是错?

logcat的:

08-29 12:06:15.040: E/AndroidRuntime(3468): java.lang.RuntimeException: Unable to    
start activity ComponentInfo{com.abs.qpr/com.abs.qpr.LauncherActivity}: 

android.content.res.Resources$NotFoundException: Resource ID #0x7f030001

08-29 12:06:15.040: E/AndroidRuntime(3468):     at   
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1751)

08-29 12:06:15.040: E/AndroidRuntime(3468):     at 
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1767)

08-29 12:06:15.040: E/AndroidRuntime(3468):     at 
android.app.ActivityThread.access$1500(ActivityThread.java:122)

08-29 12:06:15.040: E/AndroidRuntime(3468):     at 
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1005)

08-29 12:06:15.040: E/AndroidRuntime(3468):     at 
android.os.Handler.dispatchMessage(Handler.java:99)

08-29 12:06:15.040: E/AndroidRuntime(3468):     at 
android.os.Looper.loop(Looper.java:132)

08-29 12:06:15.040: E/AndroidRuntime(3468):     at    
android.app.ActivityThread.main(ActivityThread.java:4028)

08-29 12:06:15.040: E/AndroidRuntime(3468):     at  
java.lang.reflect.Method.invokeNative(Native Method)

08-29 12:06:15.040: E/AndroidRuntime(3468):     at 
java.lang.reflect.Method.invoke(Method.java:491)

08-29 12:06:15.040: E/AndroidRuntime(3468):     at 
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)

08-29 12:06:15.040: E/AndroidRuntime(3468):     at 
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)

08-29 12:06:15.040: E/AndroidRuntime(3468):     at 
dalvik.system.NativeStart.main(Native Method)

08-29 12:06:15.040: E/AndroidRuntime(3468): Caused by: 
android.content.res.Resources$NotFoundException: Resource ID #0x7f030001

08-29 12:06:15.040: E/AndroidRuntime(3468):     at 
android.content.res.Resources.getValue(Resources.java:1014)

08-29 12:06:15.040: E/AndroidRuntime(3468):     at 
android.content.res.Resources.loadXmlResourceParser(Resources.java:2039)

08-29 12:06:15.040: E/AndroidRuntime(3468):     at 
android.content.res.Resources.getLayout(Resources.java:853)

08-29 12:06:15.040: E/AndroidRuntime(3468):     at 
android.view.LayoutInflater.inflate(LayoutInflater.java:389)

08-29 12:06:15.040: E/AndroidRuntime(3468):     at 
android.view.LayoutInflater.inflate(LayoutInflater.java:347)

08-29 12:06:15.040: E/AndroidRuntime(3468):     at 
com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:245)

08-29 12:06:15.040: E/AndroidRuntime(3468):     at 
android.app.Activity.setContentView(Activity.java:1780)

08-29 12:06:15.040: E/AndroidRuntime(3468):     at 
com.abs.qpr.LauncherActivity.onCreate(LauncherActivity.java:17)

08-29 12:06:15.040: E/AndroidRuntime(3468):     at 
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1048)

08-29 12:06:15.040: E/AndroidRuntime(3468):     at 
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1715)

08-29 12:06:15.040: E/AndroidRuntime(3468):     ... 11 more`

5 个答案:

答案 0 :(得分:1)

正如其他用户提到layout-xlarge-land支持的API级别高于9.随着清单的更改,您还必须将构建目标设置为2.3我猜。

项目 - &gt;属性 - &gt; android - &gt;将目标更改为2.3

答案 1 :(得分:0)

尝试添加此内容。

android:xlargeScreens="true"
android:anyDensity="true"

答案 2 :(得分:0)

 <supports-screens android:resizeable=["true"| "false"]
          android:smallScreens=["true" | "false"]
          android:normalScreens=["true" | "false"]
          android:largeScreens=["true" | "false"]
          android:xlargeScreens=["true" | "false"]
          android:anyDensity=["true" | "false"]
          android:requiresSmallestWidthDp="integer"
          android:compatibleWidthLimitDp="integer"
          android:largestWidthLimitDp="integer"/>



 check this link once 

http://developer.android.com/guide/topics/manifest/supports-screens-element.html

答案 3 :(得分:0)

正如layout-xlarge-land一样,您还应声明支持xlarge屏幕,而不仅仅是large个屏幕。因此,android:largeScreens="true"添加<supports-screens>

答案 4 :(得分:0)

我得到了解决方案。您必须在layout xml文件夹中的Launcher Activity文件夹中至少保留一个ie layout文件,其余layout xml文件可以保留在layout-xlarge-land内文件夹中。