J'essaie de mettre à niveau mon application d'API19 à API21
Les principales modifications apportées aux propriétés de gradle sont les suivantes:
compileSdkVersion 21
buildToolsVersion "21.0.2"
minSdkVersion 8
targetSdkVersion 21
compile 'com.Android.support:appcompat-v7:21.0.0'
L'application se construit bien, mais j'obtiens toujours l'erreur suivante:
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)
J'ai essayé la version 4 (que j'utilisais précédemment) et le ActionBarDrawerToggle v7 (avec une modification du nouveau format pour le constructeur), mais j'obtiens toujours la même erreur. Le thème des applications est un parent de Theme.AppCompat.Light.DarkActionBar
Je ne sais pas trop quoi regarder.
J'ai eu le même problème en essayant d'utiliser ?attr/selectableItemBackground
et, en vous basant sur votre réponse et sur Internet, j'ai découvert ce qui n'allait pas pour moi (et probablement vous aussi).
De cette réponse j’ai appris que "? La marque est utilisée pour faire référence au style dans le thème actuel". Ce qui signifie que lorsque vous utilisez? Attr /, vous faites référence à quelque chose dans le thème actuel.
J'ai remarqué que cet incident ne se produisait que lors de l'inflation utilisant le contexte de l'application et non lors de l'utilisation du contexte d'activité. Cet article de blog explique ce qui se passe dans la section "Capacités du contexte".
... [Lorsque vous utilisez le contexte de l’application], le thème par défaut du système sur lequel vous exécutez l’inflation est déterminé, et non celui défini dans votre application.
Cela signifie que? Attr/ne fonctionnera pas car ils font référence au thème actuel, et non au thème système par défaut avec lequel vous gonflez.
Donc? Attr/fonctionne bien si vous vous assurez de gonfler en utilisant le contexte d'activité au lieu du contexte d'application.
J'ai eu un problème similaire, j'utilise AppCompat.v21 et prend en charge Android 5.0.
Ma mise en page utilise le? Attr/[nom_attribut] pour certaines valeurs et j'utilise le contexte d'activité.
Je l'ai changé pour? Android: attr/[nom_attribut] et maintenant, mes vues gonflent très bien sur les appareils fonctionnant sous Android 5.0.
Pour moi, le problème semblait être dans les fichiers de mise en page lors de l'utilisation du format? Attr/pour les valeurs. Je ne sais pas si c'est lié au thème. J'ai tout pris pour faire avancer les choses, puis j'ai rajouté des styles.
style name = "AppTheme" parent = "Base.V23.Theme.AppCompat" dans style.xml fonctionnait pour mon application.