【问题标题】:After migrating to AndroidX, Error inflating class android.support.design.widget.AppBarLayout迁移到 AndroidX 后,膨胀类 android.support.design.widget.AppBarLayout 时出错
【发布时间】:2019-06-28 20:39:17
【问题描述】:

在使用 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
}

我猜我遗漏了一些东西,但我找不到它是什么。

【问题讨论】:

  • 在应用级别(包括资源布局文件)找到android.support.design.widget.AppBarLayout并将其替换为com.google.android.material.appbar.AppBarLayout。然后清理构建!

标签: android android-appbarlayout androidx


【解决方案1】:

如果您使用的是 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/>

【讨论】:

    【解决方案2】:

    Androidx 膨胀类<android.support.design.widget.TabLayout/> 将不起作用 它不存在所以用<com.google.android.material.tabs.TabLayout/>替换它 它会正常工作 并且不要忘记添加

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

    到您的依赖项

    【讨论】:

      【解决方案3】:

      您需要使用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 Component integration。 并使用

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

      有关其他工件和类映射,请参阅AndroidX migration Doc

      【讨论】:

      • 好吧,那个错误消失了,现在我得到了这个:Error inflating class android.support.v7.widget.Toolbar
      • 将其替换为androidx.appcompat.widget.Toolbar
      • 现在我得到了Error inflating class androidx.constraintlayout.ConstraintLayout,即使我在依赖项中有这个:implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
      • ConstraintLayout 从来都不是v7 的一部分,它是一个单独的库。使用implementation 'androidx.constraintlayout:constraintlayout:1.1.2' .. 阅读上面 Ben 的回答中的链接。
      • 正如你在上面看到的,这正是我所拥有的,除了次要版本的凹凸。
      【解决方案4】:

      请从旧到新class mappings

      eg;- 使用 com.google.android.material.appbar.AppBarLayout 而不是 android.support.design.widget.AppBarLayout

      对于AppBarLayout

      对于工具栏

      【讨论】:

      • 很好的解释
      【解决方案5】:

      根据the AndroidX migration docs,AppBarLayout 的androidx 替换为com.google.android.material.appbar.AppBarLayout。试着用这个替换你的 AppBarLayout 标签。

      至于为什么编译/构建有效,我认为这与 Jetifier 有关,但我不确定。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-02-23
        • 2019-03-23
        • 1970-01-01
        • 1970-01-01
        • 2019-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多