迁移到AndroidX后,出现“Error inflating class android.support.design.widget.AppBarLayout”错误。

37

在使用Android Studio将我的项目迁移到AndroidX后(手动修复了许多导入错误),我没有编译错误,但当应用程序启动时,会崩溃并显示:

Error inflating class android.support.design.widget.AppBarLayout

布局文件中的有问题的行是:<android.support.design.widget.AppBarLayout

我的build.gradle依赖项如下:

dependencies {
    def lifecycle_version = '2.1.0-alpha02'
    // used below--will be different for androidx (migrated 2019-02-04)
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'androidx.appcompat:appcompat:1.1.0-alpha01'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0'
    implementation 'androidx.constraintlayout:constraintlayout:1.1.3'

    implementation 'androidx.coordinatorlayout:coordinatorlayout:1.0.0'

    implementation 'com.google.android.material:material:1.1.0-alpha03'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.2-alpha01'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.2-alpha01'
    implementation 'com.squareup.okhttp3:okhttp:3.11.0'
    implementation 'com.squareup.okio:okio:1.15.0'
    implementation 'io.reactivex.rxjava2:rxjava:2.2.5'
    implementation 'com.jakewharton.rxrelay2:rxrelay:2.1.0'
    // Relay class
    implementation 'com.jakewharton.rx2:replaying-share:2.1.0'
    // ReplayingShare
    implementation 'com.jakewharton.rxbinding2:rxbinding:2.2.0'
    // RxBinding
    implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"  // see def above
    // includes ViewModel and LiveData
    implementation 'org.apache.commons:commons-lang3:3.8.1'
    // for tuples like Triple
    implementation 'com.androidplot:androidplot-core:1.5.6'
    // AndroidPlot
}

我猜我错过了什么,但找不到是什么。


3
请在应用程序级别(包括资源布局文件)中查找android.support.design.widget.AppBarLayout并将其替换为com.google.android.material.appbar.AppBarLayout,然后进行清理构建! - makata
5个回答

77

你需要使用com.google.android.material.appbar.AppBarLayout

版本1.0.0已经发布,所以你可以使用implementation 'androidx.appcompat:appcompat:1.0.0'

添加依赖implementation 'com.google.android.material:material:1.0.0'

查看Material组件集成以获取最新发布版本,并使用

<com.google.android.material.appbar.AppBarLayout
  android:layout_width="match_parent"
  android:layout_height="wrap_content">

</com.google.android.material.appbar.AppBarLayout>

有关其他工件和类映射,请参阅AndroidX迁移文档


好的,那个错误已经消失了,现在我得到了这个错误:Error inflating class android.support.v7.widget.Toolbar - Robert Lewis
5
请使用 androidx.appcompat.widget.Toolbar 替换它。 - ADM
现在我遇到了“Error inflating class androidx.constraintlayout.ConstraintLayout”的问题,尽管我已经在依赖项中添加了以下内容:implementation 'androidx.constraintlayout:constraintlayout:1.1.3' - Robert Lewis
ConstraintLayout 从未是 v7 的一部分,它是一个独立的库。请使用 implementation 'androidx.constraintlayout:constraintlayout:1.1.2'。请阅读上面Ben回答中的链接。 - ADM
正如您在上面所看到的,那就是我所拥有的,除了小版本号的提升。 - Robert Lewis
它是androidx.constraintlayout.widget.ConstraintLayout而不是androidx.constraintlayout.ConstraintLayout。只需使用自动完成智能感知在xml中使用正确的包。 - ADM

35
请查看这份旧版本与新版本的类映射,例如:使用 com.google.android.material.appbar.AppBarLayout 替代 android.support.design.widget.AppBarLayout
对于AppBarLayout

enter image description here

对于Toolbar

enter image description here


1
很好的解释。 - Smack Alpha

9

Androidx中的<android.support.design.widget.TabLayout/>类无法使用,因为它不存在,请将其替换为<com.google.android.material.tabs.TabLayout/>。这样就可以正常工作了,不要忘记添加标签。

implementation 'com.google.android.material:material:1.1.0-alpha07'

针对你的依赖关系


7
根据AndroidX迁移文档,AppBarLayout的androidx替代品是com.google.android.material.appbar.AppBarLayout。请尝试使用此替代品替换您的AppBarLayout标签。
至于为什么编译/构建起作用,我猜测这与Jetifier有关,但我不确定。

3

如果您使用Kotlin DSL,则需要在build.gradle.kts中添加以下内容:

 implementation("com.google.android.material:material:1.1.0")
 implementation("androidx.appcompat:appcompat:1.1.0")

在你的布局中使用<com.google.android.material.appbar.AppBarLayout/>

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