BottomSheetBehavior no en las bibliotecas de androidX

90

Estaba usando el BottomSheetBehaviorcon la biblioteca de soporte original:

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

Cuando migré para usar las nuevas androidxbibliotecas, aunque BottomSheetBehaviorfaltaba. El mapeo de la biblioteca de soporte anterior tampoco está en la lista de refactorización de AndroidX , pero la herramienta de migración lo eliminó.

¿Qué me falta para incluir BottomSheetBehavior con las nuevas androidxbibliotecas?

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
fuente

Respuestas:

222

Resulta que la herramienta de refactorización en Android Studio Refactor > Migrate to AndroidXno migró correctamente el XML para BottomSheetBehaviour.

La antigua ubicación fue android.support.design.widget.BottomSheetBehaviormodificada por la herramienta de migración y no fue modificada. El XML original era:

<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"
    />

La nueva ubicación es com.google.android.material.bottomsheet.BottomSheetBehavior, por lo que el diseño debe ser:

<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
fuente
7
Pasé todo el día en este. Es de esperar que esto haya surgido para que la gente lo descubra más fácilmente.
Adam Hurwitz
En la última actualización de AS todavía no se corrigió este error en la migración de AndroidX. Gracias
Genaut
Muchas gracias
Sardorbek Rkh
52

También podrías reemplazar

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

por

app:layout_behavior="@string/bottom_sheet_behavior"
José M Lechón
fuente
1
Mi proyecto, generado a partir de una plantilla de Android Studio, no tenía @string/bottom_sheet_behavior. Creo que pude sacarlo al agregar implementation "com.google.android.material:material:1.1.0-alpha04"a miapp/build.gradle
Michael Osofsky
21

Debe importar la biblioteca de componentes de materiales proporcionada por Google.

Material Components para Android es un reemplazo directo de la biblioteca de soporte de diseño de Android.

Agrega tu build.gradle:

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

Entonces usa la clase com.google.android.material.bottomsheet.BottomSheetBehavior.

En su diseño puede utilizar el atributo:

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

o

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