BottomSheetBehavior tidak ada di perpustakaan androidX

90

Saya menggunakan BottomSheetBehaviordengan pustaka dukungan asli:

implementation 'com.android.support:design:27.1.1' 

Ketika saya bermigrasi untuk menggunakan androidxperpustakaan baru meskipun BottomSheetBehaviorhilang. Pemetaan dari pustaka dukungan di atas juga tidak ada dalam Daftar Pemfaktoran Ulang AndroidX , tetapi alat migrasi menghapusnya.

Apa yang saya lewatkan untuk menyertakan BottomSheetBehavior dengan androidxperpustakaan baru .

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])
    implementation 'com.google.android.material:material:1.0.0-beta01'
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

    // ReactiveX
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.2'
    implementation 'io.reactivex.rxjava2:rxkotlin:2.2.0'

    implementation 'com.android.support:design:28.1.0'

    // Android Compatability Libraries
    // Version: https://developer.android.com/topic/libraries/support-library/refactor
    implementation 'androidx.appcompat:appcompat:1.0.0-beta01'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.0-alpha1'
    implementation 'androidx.legacy:legacy-support-v4:1.0.0-beta01'
    implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0-beta01'
    implementation 'androidx.recyclerview:recyclerview:1.0.0-beta01'

    // Android Navigation Component
    // Check here for updated version info - will move to androidx soon.
    // https://developer.android.com/topic/libraries/architecture/adding-components
    def nav_version = "1.0.0-alpha04"

    // use -ktx for Kotlin
    implementation "android.arch.navigation:navigation-fragment-ktx:$nav_version"
    implementation "android.arch.navigation:navigation-ui-ktx:$nav_version"
    androidTestImplementation "android.arch.navigation:navigation-testing-ktx:$nav_version"

    // Testing
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test:runner:1.1.0-alpha4'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.0-alpha4'
}
Jim Leask
sumber

Jawaban:

222

Ternyata alat refactor di Android Studio Refactor > Migrate to AndroidXtidak memigrasikan XML dengan benar untuk BottomSheetBehaviour.

Lokasi lama android.support.design.widget.BottomSheetBehavior, dan tidak diubah oleh alat migrasi. XML aslinya adalah:

<fragment
    android:id="@+id/player_bottom_sheet_fragment"
    android:name="app.rxsongbrowsertrials.ui.player.PlayerToggleFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:behavior_hideable="false"
    app:behavior_peekHeight="56dp"
    app:layout_behavior="android.support.design.widget.BottomSheetBehavior"
    />

Lokasi baru adalah com.google.android.material.bottomsheet.BottomSheetBehavior, jadi tata letaknya harus menjadi:

<fragment
    android:id="@+id/player_bottom_sheet_fragment"
    android:name="app.rxsongbrowsertrials.ui.player.PlayerToggleFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:behavior_hideable="false"
    app:behavior_peekHeight="56dp"
    app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
    />
Jim Leask
sumber
7
Saya menghabiskan sepanjang hari untuk yang satu ini. Mudah-mudahan ini menggelegak agar orang lebih mudah menemukan.
Adam Hurwitz
Dalam pembaruan terakhir dari AS masih belum memperbaiki kesalahan ini dalam migrasi AndroidX. Terima kasih
Genaut
Terima kasih banyak
Sardorbek Rkh
52

Anda juga bisa mengganti

    app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
or 
    app:layout_behavior="android.support.design.widget.BottomSheetBehavior"

oleh

app:layout_behavior="@string/bottom_sheet_behavior"
Jose M Lechon
sumber
1
Proyek saya, yang dibuat dari template Android Studio, tidak memiliki @string/bottom_sheet_behavior. Saya pikir saya bisa menariknya di dengan menambahkan implementation "com.google.android.material:material:1.1.0-alpha04"ke sayaapp/build.gradle
Michael Osofsky
21

Anda harus mengimpor Perpustakaan Komponen Material yang disediakan oleh Google.

Komponen Material untuk Android adalah pengganti drop-in untuk Pustaka Dukungan Desain Android.

Tambahkan Anda build.gradle:

implementation 'com.google.android.material:material:x.x.x'

Kemudian gunakan kelas com.google.android.material.bottomsheet.BottomSheetBehavior.

Dalam tata letak Anda, Anda dapat menggunakan atribut:

    app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
    ..>

atau

app:layout_behavior="@string/bottom_sheet_behavior"
Gabriele Mariotti
sumber