错误:展开式工具栏布局类(CollapsingToolbarLayout)膨胀失败。

23

我的CollapsingToolbarLayout因为Error inflating class android.support.design.widget.CollapsingToolbarLayout崩溃了。

我上周末更新了Android Studio。在更新之前,它一切正常。更新之后,它就崩溃了。然而,我尝试将其降级到2.0.0版本,但不起作用。我的同事的CollapsingToolbarLayout没有任何问题。我不确定发生了什么。

错误是:

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)

这是我的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>

这是我的Gradle文件:

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'

你们有任何想法吗?谢谢。


我认为这个错误信息比你展示的更加复杂。 - OneCricketeer
嗨@cricket_007,你是正确的。有更多的错误消息,都与错误的AppCompatActivity.setContentView有关。你有什么想法吗?谢谢。 - Shumin
查找“Caused by”这些词。您遇到了“NoSuchMethodError”,这意味着支持库的不同版本似乎添加了一些额外的方法。 - OneCricketeer
10个回答

39

我找到了一个解决方案,可以尝试一下:

在 gradle build 文件中添加以下代码

compile ('com.android.support:support-v4:23.4.0'){
    force = true;
}

看起来出现了版本冲突的问题。所有支持库必须为同一版本。然而,我之前没有使用v4支持库,但它仍然可以工作。 我不知道为什么将Android Studio更新到2.1.1会导致此问题。 我只是强制所有v4库与其他支持库保持相同的版本。


1
在添加了Firebase并更新了Play Services之后,这对我也起作用。 - androidXP
只需将所有依赖项更新为“v7:24.1.1”,并将compileSdkVersion更改为24,targetSdkVersion更改为24,然后重新构建项目即可。就这些。 - Kenny Dabiri
1
@KennyDabiri 这不是一个真正的解决方案,你正在改变你的目标和编译SDK。你确定你已经在Nougat中实现了所有的新变化吗?如果没有,你的应用程序将因API 24的更改而开始崩溃。 - Rohan Kandwal
这更像是一种hack而不是解决方案。 - Ankit Aggarwal

17

我知道已经有一个被接受的答案了,但它不起作用(或者不再起作用)。

我花了几个小时研究这个错误,我所得到的是:

首先,由于Android Nougat的初始版本(也称为Android 7.0(API 24)),编译SdkVersion 24现在可用。为此,您必须更新您的SDK。 步骤1

输入图像描述

其次,更新gradle文件(需要互联网连接)。 步骤2

输入图像描述

还要更新app.gradle的此部分

输入图像描述

第三(可选),清理项目、构建项目(在“构建”选项卡下都可以进行)

希望这能帮助某些人,节省一些研究时间。

祝愿 / 快乐编码


1
这是更好的解决方案! - Ankit Aggarwal
很高兴能帮到你。干杯 - ralphgabb

3

i found two solutions,

first one is

app:statusBarScrim="@null"

第二种方法是强制应用程序。
compile ('com.android.support:support-v4:23.4.0') {
    force = true;
}

该内容来源于此处


1
我遇到过同样的问题,@Shumin的代码也是有效的,但最好的方法是消除冲突而不是绕过它们。要找到冲突 -
  1. 在Android Studio中,打开 Terminal 并输入 gradlew app:dependenciesTerminal Image

  2. 检查依赖树并查看哪个库引起了冲突Dependencies

更新: 为了检查冲突,需要检查每个库的依赖关系,并查看是否在其他库中使用了相同的依赖项但版本不同。例如,在下面的图片中,com.android.support:appcompat-v7 依赖于 com.android.support:support-vector-drawable:23.4.0。如果您发现其他库依赖于 com.android.support:support-vector-drawable,但版本不同,则已经找到冲突。


你如何能够从那个视图中检测到冲突的依赖关系?我看不到任何显示差异的迹象。 - Kenny Dabiri
@KennyDabiri 检查哪个库依赖于哪个库版本,你会找到冲突所在。图片中不是很清楚,但这就是做法。 - Rohan Kandwal
@KennyDabiri 更新了答案,请告诉我是否有帮助。 - Rohan Kandwal
好的,我会看一下。 - Kenny Dabiri

0
如果您正在使用 Oreo 或更高版本的 SDK,并在 CollapsingToolbar 中使用 drawable,请确保该 drawable 存在于 normal drawable folderdrawable-v24 文件夹中。
如果您的 drawable 仅存在于 drawable-v24 文件夹中,并在 Oreo SDK 下运行应用程序,则 Android Studio logcat 会显示“crash in CollapsingToolbar”,但实际问题是您的 drawable 文件夹中缺少一些可绘制对象。

0

我遇到了同样的问题,当我膨胀CollapsingToolbar时出现了相同的错误。 我在我的应用程序gradle文件中有以下依赖项

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'

使用API 23 SDK编译的构建工具版本为25.0.2。然后我检查了依赖项,并发现Firebase使用了

android:support:support-v4:24.0.0

并且appcompat使用

android:support:support-v4-23.4.0 -> 24.0

因此,我将所有构建库的编号都更改为


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'

现在对我有效。它有多耐用?我没有任何想法。


0

我的问题是并非所有的支持库 gradle 导入都是相同的,例如,我有:

  compile('com.android.support:recyclerview-v7:23.4.0') {
        exclude module: 'support-v4'
    }
  compile 'com.android.support:support-annotations:24.0.0'

将所有导入都更改为24.0.0,使应用程序能够无问题运行。


0
请在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>

和样式资源文件

<style name="AppTheme.NoActionBar">
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
</style>

0

这对我很有用。将你的appcompact和设计版本更改如下:

compile 'com.android.support:appcompat-v7:23.1.1'
compile 'com.android.support:design:23.1.1'

0

你好朋友,我遇到了这个问题

只需做出

compileSdkVersion 25
buildToolsVersion "25.0.2"

所有支持Gradle的更改为25.1.1,这对我很有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接