膨胀类 CollapsingToolbarLayout 时出错

Posted

技术标签:

【中文标题】膨胀类 CollapsingToolbarLayout 时出错【英文标题】:Error inflating class CollapsingToolbarLayout 【发布时间】:2016-09-22 06:03:42 【问题描述】:

我的 CollapsingToolbarLayout 因错误膨胀类 android.support.design.widget.CollapsingToolbarLayout 而崩溃。

我上周末更新了 android studio。在更新之前,它工作正常。我更新后,它崩溃了。但是,我尝试将其降级到 2.0.0 版本,但它不再工作了。我的同事对 CollapsingToolbarLayout 没有任何问题。我不确定发生了什么。

错误是:

java.lang.RuntimeException: Unable to start activity ComponentInfocom.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_
    android:layout_
    >

    <android.support.design.widget.AppBarLayout
        android:id="@+id/appbar"
        android:layout_
        android:layout_
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
        >

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsing_toolbar"
            android:layout_
            android:layout_
            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_
                android:layout_
                app:layout_collapseMode="pin"
                />

        </android.support.design.widget.CollapsingToolbarLayout>

    </android.support.design.widget.AppBarLayout>

    <include
        layout="@layout/layout"
        android:layout_
        android:layout_
        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'

你们有什么想法吗?谢谢。

【问题讨论】:

我认为该错误消息比您显示的要多。 嗨@cricket_007,你是对的。还有更多错误消息,都是关于错误 AppCompatActivity.setContentView。你有什么主意吗?谢谢 查找单词“Caused by”。你得到一个“NoSuchMethodError”,这意味着不同版本的支持库似乎添加了一些额外的方法 【参考方案1】:

我找到了一个解决方案,试试看吧:

在 gradle 构建文件中添加以下代码

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

似乎存在版本冲突问题。所有支持库必须是相同的版本。但是,我之前没有使用过 v4 支持库,它可以工作。 我不知道为什么将 android studio 更新到 2.1.1 会导致问题。 我只是强制所有 v4 库与其他支持库相同。

【讨论】:

在添加 firebase 并更新 play services 后也为我工作 只需将所有依赖项更新为 'v7:24.1.1' 并将 compileSdkVersion 更改为 24,将 targetSdkVersion 更改为 24 然后重建项目。就这些 @KennyDabiri 这不是一个真正的解决方案,您正在更改目标并编译 SDK。你确定你已经在 Nougat 中实施了所有的新变化吗?否则,由于 API 24 更改,您的应用将开始崩溃。 这更像是一个 hack,而不是一个解决方案【参考方案2】:

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

我花了几个小时研究这个错误,我想出的是这个。

首先,由于 Android Nougat 的初始版本也称为 Android 7.0 (API 24) compileSdkVersion 24 现在可用。为此,您必须更新您的 sdk。 Step 1

其次,是更新你的 gradle 文件(需要互联网连接)。 Step 2

同时更新 app.gradle 的这一部分

第三个(可选)清理项目,构建项目(都在构建选项卡下)

我希望这可以帮助那里的人并节省几个小时的研究时间。

干杯/快乐编码

【讨论】:

这是更好的解决方案! 很高兴它有帮助。干杯【参考方案3】:

我找到了两个解决方案,

第一个是

app:statusBarScrim="@null"

二是强制app

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

来源取自here

【讨论】:

【参考方案4】:

我有同样的问题,@Shumin 的代码也很有效,但最好是消除冲突而不是绕过它们。找出冲突 -

    在Android Studio中,打开Terminal并输入gradlew app:dependencies.

    检查依赖关系树并查看哪个库导致冲突

更新:- 要检查冲突,请检查每个库的依赖关系,看看您是否没有在其他库中使用相同的依赖关系但版本不同。例如,在下图中,com.android.support:appcompat-v7 依赖于 com.android.support:support-vector-drawable:23.4.0。如果你找到了一些其他依赖于com.android.support:support-vector-drawable的库,但版本不同,那么你就发现了你的冲突。

【讨论】:

您如何从该视图中检测到冲突的依赖关系,我看不到任何显示差异的迹象。 @KennyDabiri 检查哪个库依赖于哪个库版本,在那里你会发现冲突。图像不是很清楚,但你就是这样做的。 @KennyDabiri 更新答案,如果没有帮助,请告诉我。 好的会调查一下【参考方案5】:

我的问题是,并非所有支持库 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 使应用程序能够正常运行。

【讨论】:

【参考方案6】:

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

只做

compileSdkVersion 25
buildToolsVersion "25.0.2"

并且所有支持 gradle 更改为 25.1.1 它对我有用。

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

我在给 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'

它现在对我有用。有多耐用?我不知道。

【讨论】:

【参考方案9】:

这对我有用。更改您的appcompact 并设计libray 版本如下,

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

【讨论】:

【参考方案10】:

如果您正在使用 Oreo 或 Upper sdk 并在 CollapsingToolbar 中使用可绘制对象,请检查此可绘制对象是否存在于 normal drawable 文件夹drawable-v24 文件夹中。

如果您的 drawable 仅在 drawable-v24 文件夹中并在 Oreo sdk 下运行应用程序,Android Studio logcat 会显示“在 CollapsingToolbar 中崩溃”,但真正的问题是在您的 drawable 文件夹中缺少一些 drawable。

【讨论】:

以上是关于膨胀类 CollapsingToolbarLayout 时出错的主要内容,如果未能解决你的问题,请参考以下文章

膨胀类 CollapsingToolbarLayout 时出错

膨胀类片段时出错

使用上下文类膨胀布局

如何为android修复“错误膨胀类GeckoEngineView”

在 RecyclerView 上膨胀类 ImageView 时出错

膨胀类 com.google.android.material.slider.Slider 时出错