BottomSheetBehavior non nelle librerie androidX


92

Stavo usando BottomSheetBehaviorcon la libreria di supporto originale:

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

Quando sono migrato per utilizzare le nuove androidxlibrerie anche se BottomSheetBehaviormancava il file. La mappatura dalla libreria di supporto sopra non è nemmeno nell'elenco di refactoring AndroidX , ma lo strumento di migrazione l'ha rimossa.

Cosa mi manca per includere BottomSheetBehavior con le nuove androidxlibrerie.

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

Risposte:


226

Si scopre che lo strumento di refactoring in Android Studio Refactor > Migrate to AndroidXnon ha migrato correttamente l'XML per BottomSheetBehaviour.

La vecchia posizione era android.support.design.widget.BottomSheetBehaviore non è stata modificata dallo strumento di migrazione. L'XML originale 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 nuova posizione è com.google.android.material.bottomsheet.BottomSheetBehavior, quindi il layout deve diventare:

<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
Ho passato tutto il giorno su questo. Si spera che questo sia esploso affinché le persone lo scoprissero più facilmente.
Adam Hurwitz

Nell'ultimo aggiornamento da AS ancora non corretto questo errore nella migrazione AndroidX. Grazie
Genaut

Grazie mille
Sardorbek Rkh

54

Potresti anche sostituire

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

di

app:layout_behavior="@string/bottom_sheet_behavior"

1
Il mio progetto, generato da un modello di Android Studio, non aveva @string/bottom_sheet_behavior. Penso di essere stato in grado di farlo aggiungendo implementation "com.google.android.material:material:1.1.0-alpha04"al mioapp/build.gradle
Michael Osofsky il

22

Devi importare la libreria dei componenti dei materiali fornita da Google.

Material Components per Android è un sostituto immediato della libreria di supporto per la progettazione di Android.

Aggiungi il tuo build.gradle:

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

Quindi usa la classe com.google.android.material.bottomsheet.BottomSheetBehavior.

Nel tuo layout puoi usare l'attributo:

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

o

app:layout_behavior="@string/bottom_sheet_behavior"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.