我想根据应用程序是在智能手机还是平板电脑上运行来提供不同的布局。因此,我分别放置了不同的布局定义layout-normal
。layout-large
.
在平板电脑上进行测试期间,当关联的活动第二次启动时,我遇到了以下异常:
09-06 13:28:43.640: E/AndroidRuntime(26260): Caused by: android.content.res.Resources$NotFoundException: Resource ID #0x7f030005
09-06 13:28:43.640: E/AndroidRuntime(26260): at android.content.res.Resources.getValue(Resources.java:1010)
09-06 13:28:43.640: E/AndroidRuntime(26260): at android.content.res.Resources.loadXmlResourceParser(Resources.java:2088)
09-06 13:28:43.640: E/AndroidRuntime(26260): at android.content.res.Resources.getLayout(Resources.java:849)
09-06 13:28:43.640: E/AndroidRuntime(26260): at android.view.LayoutInflater.inflate(LayoutInflater.java:389)
09-06 13:28:43.640: E/AndroidRuntime(26260): at android.view.LayoutInflater.inflate(LayoutInflater.java:347)
09-06 13:28:43.640: E/AndroidRuntime(26260): at com.android.internal.policy.impl.PhoneWindow.setContentView(PhoneWindow.java:245)
09-06 13:28:43.640: E/AndroidRuntime(26260): at android.app.Activity.setContentView(Activity.java:1786)
09-06 13:28:43.640: E/AndroidRuntime(26260): ... 11 more
当第一次启动 Activity 时,一切都很好,并且布局正确膨胀。该错误仅在 Activity 完成并从后堆栈上的前一个 Activity 重新启动后发生。
我可以在运行 Android 3.2 的三星 Galaxy Tab 以及适用于 Android 3.2 和 4.1 的模拟器中重现该问题。布局是通过 加载的Activity.setContentView(int resId)
,所以此时没有什么魔力。此外,在 stacktrace() 中记录的资源 ID对应于给定#0x7f030005
的根布局的 id 。R.layout
Activity.setContentView(int resId)
如果我将布局从文件夹复制layout-large
到layout
文件夹并更改副本中的背景颜色,则不会引发异常,但layout
会加载具有修改后背景颜色的非特定版本。
在清单中,我已经配置了支持的屏幕
<supports-screens
android:smallScreens="false"
android:normalScreens="true"
android:largeScreens="true"
android:xlargeScreens="true"
android:anyDensity="true" />
有人知道如何解决这个问题吗?