Mon CollapsingToolbarLayout se bloque en raison d'une erreur de gonflage de classe Android.support.design.widget.CollapsingToolbarLayout.
J'ai mis à jour le studio Android le week-end dernier. Avant la mise à jour, cela fonctionne bien. Après l'avoir mis à jour, il s'est écrasé. Cependant, j'ai essayé de le rétrograder à la version 2.0.0 et cela ne fonctionne plus. Mon collègue n'a aucun problème avec CollapsingToolbarLayout. Je ne suis pas sûr de ce qui s'est passé.
L'erreur était:
Java.lang.RuntimeException: Unable to start activity ComponentInfo{com.test.Android/com.test.Android.ui.activity.RandomActivity}: Android.view.InflateException: Binary XML file line #22: Error inflating class Android.support.design.widget.CollapsingToolbarLayout
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2325)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2387)
at Android.app.ActivityThread.access$800(ActivityThread.Java:151)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1303)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:135)
at Android.app.ActivityThread.main(ActivityThread.Java:5254)
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:903)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:698)
Caused by: Android.view.InflateException: Binary XML file line #22: Error inflating class Android.support.design.widget.CollapsingToolbarLayout
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.rInflate(LayoutInflater.Java:809)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:809)
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.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.Java:276)
at Android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.Java:136)
at com.test.Android.ui.activity.RefreshableActivity.onCreate(RefreshableActivity.Java:31)
at Android.app.Activity.performCreate(Activity.Java:5990)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1106)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2278)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2387)
at Android.app.ActivityThread.access$800(ActivityThread.Java:151)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1303)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:135)
at Android.app.ActivityThread.main(ActivityThread.Java:5254)
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:903)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:698)
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.rInflate(LayoutInflater.Java:809)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:809)
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.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.Java:276)
at Android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.Java:136)
at com.test.Android.ui.activity.RefreshableActivity.onCreate(RefreshableActivity.Java:31)
at Android.app.Activity.performCreate(Activity.Java:5990)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1106)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2278)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2387)
at Android.app.ActivityThread.access$800(ActivityThread.Java:151)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1303)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:135)
at Android.app.ActivityThread.main(ActivityThread.Java:5254)
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:903)
at com.Android.internal.os.ZygoteInit.main(ZygoteInit.Java:698)
Caused by: Java.lang.NoSuchMethodError: No static method setLayoutDirection(Landroid/graphics/drawable/Drawable;I)V in class Landroid/support/v4/graphics/drawable/DrawableCompat; or its super classes (declaration of 'Android.support.v4.graphics.drawable.DrawableCompat' appears in /data/app/com.test.Android-1/base.apk)
at Android.support.design.widget.CollapsingToolbarLayout.setStatusBarScrim(CollapsingToolbarLayout.Java:663)
at Android.support.design.widget.CollapsingToolbarLayout.<init>(CollapsingToolbarLayout.Java:197)
at Android.support.design.widget.CollapsingToolbarLayout.<init>(CollapsingToolbarLayout.Java:132)
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.rInflate(LayoutInflater.Java:809)
at Android.view.LayoutInflater.rInflate(LayoutInflater.Java:809)
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.AppCompatDelegateImplV7.setContentView(AppCompatDelegateImplV7.Java:276)
at Android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.Java:136)
at com.test.Android.ui.activity.RefreshableActivity.onCreate(RefreshableActivity.Java:31)
at Android.app.Activity.performCreate(Activity.Java:5990)
at Android.app.Instrumentation.callActivityOnCreate(Instrumentation.Java:1106)
at Android.app.ActivityThread.performLaunchActivity(ActivityThread.Java:2278)
at Android.app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2387)
at Android.app.ActivityThread.access$800(ActivityThread.Java:151)
at Android.app.ActivityThread$H.handleMessage(ActivityThread.Java:1303)
at Android.os.Handler.dispatchMessage(Handler.Java:102)
at Android.os.Looper.loop(Looper.Java:135)
at Android.app.ActivityThread.main(ActivityThread.Java:5254)
at Java.lang.reflect.Method.invoke(Native Method)
at Java.lang.reflect.Method.invoke(Method.Java:372)
Voici mon CollapsingToolbarLayout:
<Android.support.design.widget.CoordinatorLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
>
<Android.support.design.widget.AppBarLayout
Android:id="@+id/appbar"
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
>
<Android.support.design.widget.CollapsingToolbarLayout
Android:id="@+id/collapsing_toolbar"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:clickable="true"
app:contentScrim="@color/blue"
app:statusBarScrim="@color/blue_dark"
app:layout_scrollFlags="scroll|exitUntilCollapsed|snap"
>
<include layout="@layout/layout_page" />
<Android.support.v7.widget.Toolbar
Android:id="@+id/toolbar"
Android:layout_width="match_parent"
Android:layout_height="?attr/actionBarSize"
app:layout_collapseMode="pin"
/>
</Android.support.design.widget.CollapsingToolbarLayout>
</Android.support.design.widget.AppBarLayout>
<include
layout="@layout/layout"
Android:layout_width="match_parent"
Android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
/>
</Android.support.design.widget.CoordinatorLayout>
Voici mon fichier de classement:
compile 'com.google.Android.gms:play-services:9.0.0'
compile 'com.Android.support:recyclerview-v7:23.4.0'
compile 'com.Android.support:support-v13:23.4.0'
compile 'com.Android.support:appcompat-v7:23.4.0'
compile 'com.Android.support:cardview-v7:23.4.0'
compile 'com.Android.support:customtabs:23.4.0'
compile 'com.Android.support:design:23.4.0'
Avez-vous les gars une idée? Merci.
J'ai trouvé une solution. Peut-être que ça marche essayer:
ajouter le code ci-dessous dans le fichier de construction de Gradle
compile ('com.Android.support:support-v4:23.4.0'){
force = true;
}
On dirait qu'il a un problème de conflit de version. Toutes les bibliothèques de support doivent être de la même version. Cependant, je n’avais jamais utilisé la bibliothèque de support technique v4 auparavant et cela fonctionne . Je ne sais pas pourquoi la mise à jour du studio Android à la version 2.1.1 cause le problème . bibliothèques.
Je sais qu'il existe déjà une réponse acceptée, MAIS cela ne fonctionne pas (ou ne fonctionne plus).
J'ai passé quelques heures à rechercher cette erreur, voici ce que j'ai découvert.
Tout d'abord, en raison de la version initiale d'Android Nougat, également appelé Android 7.0 (API 24), compileSdkVersion 24 est maintenant disponible. Pour ce faire, vous devez mettre à jour votre sdk. Étape 1
Deuxièmement, vous devez mettre à jour vos fichiers Gradle (connexion Internet requise). Étape 2
Mettez également à jour cette partie de app.gradle
Troisième (facultatif) Projet propre, Projet de construction (les deux sous l’onglet Construire)
J'espère que cela a aidé quelqu'un et économisé quelques heures de recherche.
Cheers/Joyeux codage
j'ai trouvé deux solutions,
le premier est
app:statusBarScrim="@null"
la seconde est de forcer l'application
compile ('com.Android.support:support-v4:23.4.0') {
force = true;
}
Sources prises de ici
J'ai eu le même problème, le code de @ Shumin est efficace aussi, mais il est préférable de supprimer les conflits plutôt que de les contourner. Pour trouver le conflit -
Dans Android Studio, ouvrez Terminal
et entrez gradlew app:dependencies
.
Consultez l'arborescence des dépendances et voyez quelle bibliothèque est à l'origine du conflit
Update: - Pour vérifier les conflits, vérifiez les dépendances de chaque bibliothèque et vérifiez si vous n'utilisez pas la même dépendance dans une autre bibliothèque, mais avec une version différente. Par exemple, dans l'image ci-dessous, com.Android.support:appcompat-v7
dépend de com.Android.support:support-vector-drawable:23.4.0
. Si vous trouvez une autre bibliothèque dépendant de com.Android.support:support-vector-drawable
mais que la version est différente, alors vous avez trouvé votre conflit.
Cela a fonctionné pour moi. Changez votre appcompact
et concevez la version libray
comme suit,
compile 'com.Android.support:appcompat-v7:23.1.1'
compile 'com.Android.support:design:23.1.1'
veuillez ajouter le code ci-dessous dans menifiest.xml.
<activity Android:name=".MainActivity"
Android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action Android:name="Android.intent.action.MAIN" />
<category Android:name="Android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
et fichier de ressources de style
<style name="AppTheme.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
Si vous travaillez sur Oreo ou upper sdk et que vous utilisez un dessin dans CollapsingToolbar, vérifiez que ce dessin existe dans dossier normal dessinable et drawable-v24 dossier.
Si votre dessin est uniquement dans le dossier drawable-v24 et que l'application est exécutée sous Oreo sdk, Android Studio logcat indique "crash in CollapsingToolbar", mais il manque un problème réel dans votre dessin.
Juste faire
compileSdkVersion 25
buildToolsVersion "25.0.2"
Et tous soutiennent le passage à 25.1.1, c’est un travail pour moi.
J'ai eu le même problème montrant la même erreur en gonflant la barre CollapsingTool ... ... J'ai eu les dépendances suivantes dans mon fichier de dégradé d'application
compile 'com.Android.support:appcompat-v7:23.4.0'
compile 'com.Android.support:design:23.4.0'
compile 'com.Android.support:recyclerview-v7:23.4.0'
compile 'com.Android.support:cardview-v7:23.4.0'
compile 'com.google.firebase:firebase-ads:10.0.1'
et compilez l’outil 25.0.2 avec API 23 sdk . compilé avec les dépendances et découvert que firebase utilise
Android:support:support-v4:24.0.0
et l'appcompat utilise
Android:support:support-v4-23.4.0 -> 24.0
Par conséquent, j'ai changé tout le numéro de la bibliothèque de construction en
compile 'com.Android.support:appcompat-v7:24.0.0'
compile 'com.Android.support:design:24.0.0'
compile 'com.Android.support:recyclerview-v7:24.0.0'
compile 'com.Android.support:cardview-v7:24.0.0'
compile 'com.google.firebase:firebase-ads:10.0.1'
Cela a fonctionné pour moi maintenant. Quelle est la durabilité? Je n'ai aucune idée.
Mon problème était que toutes les importations de support de bibliothèque n'importaient pas la même chose, par exemple, j'avais:
compile('com.Android.support:recyclerview-v7:23.4.0') {
exclude module: 'support-v4'
}
compile 'com.Android.support:support-annotations:24.0.0'
en le changeant pour que toutes les importations soient 24.0.0
, l'application s'est exécutée sans problème.