web-dev-qa-db-ja.com

SDK21へのアップグレード-クラスAndroid.support.v7.internal.widget.ActionBarContainerの拡張エラー

アプリをAPI19からAPI21にアップグレードしようとしています

Gradleプロパティに加えた主な変更は次のとおりです。

compileSdkVersion 21
buildToolsVersion "21.0.2"

minSdkVersion 8
targetSdkVersion 21


compile 'com.Android.support:appcompat-v7:21.0.0'

アプリは正常にビルドされますが、常に次のエラーが発生します。

10-22 23:10:38.867    7972-8058/com.example.Android.demo E/ACRA? com.example.Android.demo fatal error : Unable to start activity ComponentInfo{com.example.Android.demo/com.example.Android.demo.MainActivity2}: Android.view.InflateException: Binary XML file line #27: Error inflating class Android.support.v7.internal.widget.ActionBarContainer
Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.Android.demo/com.example.Android.demo.MainActivity2}: Android.view.InflateException: Binary XML file line #27: Error inflating class Android.support.v7.internal.widget.ActionBarContainer
        at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2298)
        at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2360)
        at Android.app.ActivityThread.access$800(ActivityThread.Java:144)
        at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1278)
        at Android.os.Handler.dispatchMessage(Handler.Java:102)
        at Android.os.Looper.loop(Looper.Java:135)
        at Android.app.ActivityThread.main(ActivityThread.Java:5221)
        at Java.lang.reflect.Method.invoke(Native Method)
        at Java.lang.reflect.Method.invoke(Method.Java:372)
        at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:899)
        at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:694)
 Caused by: Android.view.InflateException: Binary XML file line #27: Error inflating class Android.support.v7.internal.widget.ActionBarContainer
        at Android.view.LayoutInflater.createView(LayoutInflater.Java:633)
        at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:743)
        at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:806)
        at Android.view.LayoutInflater.inflate(LayoutInflater.Java:504)
        at Android.view.LayoutInflater.inflate(LayoutInflater.Java:414)
        at Android.view.LayoutInflater.inflate(LayoutInflater.Java:365)
        at Android.support.v7.app.ActionBarActivityDelegateBase.ensureSubDecor(ActionBarActivityDelegateBase.Java:273)
        at Android.support.v7.app.ActionBarActivityDelegateBase.createSupportActionBar(ActionBarActivityDelegateBase.Java:155)
        at Android.support.v7.app.ActionBarActivityDelegate.getSupportActionBar(ActionBarActivityDelegate.Java:123)
        at Android.support.v7.app.ActionBarActivity.getSupportActionBar(ActionBarActivity.Java:73)
        at com.example.Android.demo.MainActivity2.onCreate(MainActivity2.Java:243)
        at Android.app.Activity.performCreate(Activity.Java:5933)
        at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1105)
        at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2251)
        at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2360)
        at Android.app.ActivityThread.access$800(ActivityThread.Java:144)
        at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1278)
        at Android.os.Handler.dispatchMessage(Handler.Java:102)
        at Android.os.Looper.loop(Looper.Java:135)
        at Android.app.ActivityThread.main(ActivityThread.Java:5221)
        at Java.lang.reflect.Method.invoke(Native Method)
        at Java.lang.reflect.Method.invoke(Method.Java:372)
        at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:899)
        at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:694)
 Caused by: Java.lang.reflect.InvocationTargetException
        at Java.lang.reflect.Constructor.newInstance(Native Method)
        at Java.lang.reflect.Constructor.newInstance(Constructor.Java:288)
        at Android.view.LayoutInflater.createView(LayoutInflater.Java:607)
        at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:743)
        at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:806)
        at Android.view.LayoutInflater.inflate(LayoutInflater.Java:504)
        at Android.view.LayoutInflater.inflate(LayoutInflater.Java:414)
        at Android.view.LayoutInflater.inflate(LayoutInflater.Java:365)
        at Android.support.v7.app.ActionBarActivityDelegateBase.ensureSubDecor(ActionBarActivityDelegateBase.Java:273)
        at Android.support.v7.app.ActionBarActivityDelegateBase.createSupportActionBar(ActionBarActivityDelegateBase.Java:155)
        at Android.support.v7.app.ActionBarActivityDelegate.getSupportActionBar(ActionBarActivityDelegate.Java:123)
        at Android.support.v7.app.ActionBarActivity.getSupportActionBar(ActionBarActivity.Java:73)
        at com.example.Android.demo.MainActivity2.onCreate(MainActivity2.Java:243)
        at Android.app.Activity.performCreate(Activity.Java:5933)
        at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1105)
        at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2251)
        at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2360)
        at Android.app.ActivityThread.access$800(ActivityThread.Java:144)
        at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1278)
        at Android.os.Handler.dispatchMessage(Handler.Java:102)
        at Android.os.Looper.loop(Looper.Java:135)
        at Android.app.ActivityThread.main(ActivityThread.Java:5221)
        at Java.lang.reflect.Method.invoke(Native Method)
        at Java.lang.reflect.Method.invoke(Method.Java:372)
        at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:899)
        at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:694)
 Caused by: Java.lang.RuntimeException: Failed to resolve attribute at index 11
        at Android.content.res.TypedArray.getDrawable(TypedArray.Java:747)
        at Android.support.v7.internal.widget.ActionBarContainer.<init>(ActionBarContainer.Java:66)
        at Java.lang.reflect.Constructor.newInstance(Native Method)
        at Java.lang.reflect.Constructor.newInstance(Constructor.Java:288)
        at Android.view.LayoutInflater.createView(LayoutInflater.Java:607)
        at Android.view.LayoutInflater.createViewFromTag(LayoutInflater.Java:743)
        at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:806)
        at Android.view.LayoutInflater.inflate(LayoutInflater.Java:504)
        at Android.view.LayoutInflater.inflate(LayoutInflater.Java:414)
        at Android.view.LayoutInflater.inflate(LayoutInflater.Java:365)
        at Android.support.v7.app.ActionBarActivityDelegateBase.ensureSubDecor(ActionBarActivityDelegateBase.Java:273)
        at Android.support.v7.app.ActionBarActivityDelegateBase.createSupportActionBar(ActionBarActivityDelegateBase.Java:155)
        at Android.support.v7.app.ActionBarActivityDelegate.getSupportActionBar(ActionBarActivityDelegate.Java:123)
        at Android.support.v7.app.ActionBarActivity.getSupportActionBar(ActionBarActivity.Java:73)
        at com.example.Android.demo.MainActivity2.onCreate(MainActivity2.Java:243)
        at Android.app.Activity.performCreate(Activity.Java:5933)
        at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1105)
        at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2251)
        at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2360)
        at Android.app.ActivityThread.access$800(ActivityThread.Java:144)
        at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1278)
        at Android.os.Handler.dispatchMessage(Handler.Java:102)
        at Android.os.Looper.loop(Looper.Java:135)
        at Android.app.ActivityThread.main(ActivityThread.Java:5221)
        at Java.lang.reflect.Method.invoke(Native Method)
        at Java.lang.reflect.Method.invoke(Method.Java:372)
        at com.Android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.Java:899)
        at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:694)

バージョン4(以前使用していた)とv7 ActionBarDrawerToggle(コンストラクターの新しい形式に変更)を試しましたが、常に同じエラーが発生します。アプリのテーマはTheme.AppCompat.Light.DarkActionBarの親です

何を見ればいいのかよくわかりません。

16
Andrew

?attr/selectableItemBackgroundを使おうとしたときに同じ問題が発生しました。あなたの回答とインターネットでの調査に基づいて、私(そしておそらくあなたも)にとって何が悪いのかがわかりました。

この回答 「?マークは現在のテーマのスタイルを参照するために使用されている」ことを学びました。つまり、?attr /を使用すると、現在のテーマの何かを参照します。

このクラッシュは、アクティビティコンテキストを使用しているときではなく、アプリケーションコンテキストを使用して膨らませているときにのみ発生することに気付きました。 このブログ投稿 「コンテキスト機能」セクションで何が起こっているかを説明します。

... [アプリケーションコンテキストを使用する場合]インフレーションは、アプリケーションで定義されているものではなく、実行しているシステムのデフォルトのテーマで行われます。

これは、?attr /が機能しないことを意味します。これは、現在のテーマを参照しているためであり、使用しているデフォルトのシステムテーマではありません。

したがって、アプリケーションコンテキストではなくアクティビティコンテキストを使用して拡張する場合は、?attr /は正常に機能します。

17
nibarius

同様の問題がありました。AppCompat.v21を使用していて、Android 5.0をサポートしています。

私のレイアウトでは、いくつかの値に?attr/[attribute_name]を使用し、アクティビティコンテキストを使用しています。

これを?android:attr/[attribute_name]に変更すると、Android 5.0を実行しているデバイスでビューが正常に膨らみます。

8
simplatek

私にとって、値に?attr /形式を使用する場合、問題はレイアウトファイルにあるように見えました。テーマに関連しているかどうかはわかりません。私は物事を進めるためにこれらすべてを取り出してから、スタイルを追加し直しました。

6
Andrew

style.xmlのstylename = "AppTheme" parent = "Base.V23.Theme.AppCompat"は、私のアプリで機能しました。

1
Matthias Huber