アプリがスマートフォンで実行されるか、タブレットで実行されるかによって、異なるレイアウトを提供したいと考えています。したがって、私はそれぞれに異なるレイアウト定義を入れましたlayout-normal
。layout-large
.
タブレットでのテスト中に、関連するアクティビティが2 回目に開始されると、次の例外が発生します。
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
アクティビティが初めて開始されると、すべてがうまくいき、レイアウトが正しく膨張します。このエラーは、アクティビティが終了し、バック スタックの前のアクティビティから再開された後にのみ発生します。
Android 3.2 を実行している Samsung 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" />
これを修正する方法を知っている人はいますか?