BottomSheetBehavior not in androidX bibliothèques

90

J'utilisais BottomSheetBehavioravec la bibliothèque de support d'origine:

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

Lorsque j'ai migré pour utiliser les nouvelles androidxbibliothèques bien que le BottomSheetBehaviorfichier. Le mappage de la bibliothèque de support ci-dessus ne figure pas non plus dans la liste de refactorisation AndroidX , mais l'outil de migration l'a supprimé.

Ce qui me manque pour inclure le BottomSheetBehavior avec les nouvelles androidxbibliothèques.

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
la source

Réponses:

222

Il s'avère que l'outil de refactorisation d'Android Studio Refactor > Migrate to AndroidXn'a pas correctement migré le XML pour BottomSheetBehaviour.

L'ancien emplacement a été android.support.design.widget.BottomSheetBehavioret n'a pas été modifié par l'outil de migration. Le XML d'origine était:

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

Le nouvel emplacement est com.google.android.material.bottomsheet.BottomSheetBehavior, donc la mise en page doit devenir:

<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
la source
7
J'ai passé toute la journée sur celui-ci. J'espère que cela a été mis en place pour que les gens puissent le découvrir plus facilement.
Adam Hurwitz
Dans la dernière mise à jour d'AS toujours pas corrigé cette erreur dans la migration AndroidX. Merci
Genaut
Merci beaucoup
Sardorbek Rkh
52

Vous pouvez également remplacer

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

par

app:layout_behavior="@string/bottom_sheet_behavior"
José M Lechon
la source
1
Mon projet, généré à partir d'un modèle Android Studio, n'avait pas @string/bottom_sheet_behavior. Je pense que j'ai pu le tirer en ajoutant implementation "com.google.android.material:material:1.1.0-alpha04"à monapp/build.gradle
Michael Osofsky
21

Vous devez importer la bibliothèque de composants matériels fournie par Google.

Material Components for Android est un remplacement instantané de la bibliothèque de support de conception d'Android.

Ajoutez votre build.gradle:

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

Ensuite, utilisez la classe com.google.android.material.bottomsheet.BottomSheetBehavior.

Dans votre mise en page, vous pouvez utiliser l'attribut:

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

ou

app:layout_behavior="@string/bottom_sheet_behavior"
Gabriele Mariotti
la source