99 votes

BottomSheetBehavior pas dans les bibliothèques androidX

J'utilisais le BottomSheetBehavior avec la bibliothèque de support originale :

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

Lorsque j'ai migré pour utiliser la nouvelle androidx bien que les BottomSheetBehavior est manquant. Le mappage de la bibliothèque de support ci-dessus n'est pas dans le fichier Liste des améliorations apportées à AndroidX non plus, mais l'outil de migration l'a supprimé.

Qu'est-ce qui me manque pour inclure le comportement de BottomSheetBehavior dans le nouveau système de gestion de l'eau ? androidx bibliothè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'
}

234voto

Jim Leask Points 788

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

L'ancien emplacement était android.support.design.widget.BottomSheetBehavior et 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 La mise en page doit donc 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"
    />

7 votes

J'ai passé toute la journée sur celui-ci. J'espère que ça a fait des bulles pour que les gens puissent le découvrir plus facilement.

0 votes

Dans la dernière mise à jour de AS toujours pas corrigé cette erreur dans la migration AndroidX. Merci

59voto

Lechon Points 209

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"

1 votes

Mon projet, généré à partir d'un modèle Android Studio, n'avait pas de @string/bottom_sheet_behavior . Je pense que j'ai réussi à le faire rentrer en ajoutant implementation "com.google.android.material:material:1.1.0-alpha04" à mon app/build.gradle

27voto

Gabriele Mariotti Points 7243

Vous devez importer le Bibliothèque des composants matériels fourni par Google.

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

Ajoutez votre build.gradle :

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

Utilisez ensuite 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"

1voto

J'ai reçu ce message d'erreur :

Didn't find class "com.google.android.material.bottomsheet.BottomSheetBehaviour"

La seule façon de résoudre ce problème était de modifier le XML :

Change:

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

Change to:

app:layout_behavior="@string/bottom_sheet_behavior"

Cela a résolu le problème

1voto

ss007 Points 56

Pour la classe R

com.google.android.material.R.id.design_bottom_sheet

au lieu de

android.support.design.R.id.design_bottom_sheet

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X