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'
}

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

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"

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"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.