BottomSheetBehavior não está nas bibliotecas androidX

92

Eu estava usando o BottomSheetBehaviorcom a biblioteca de suporte original:

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

Quando migrei para usar as novas androidxbibliotecas, embora o BottomSheetBehavioresteja faltando. O mapeamento da biblioteca de suporte acima também não está na lista de refatoração do AndroidX , mas a ferramenta de migração o removeu.

O que estou perdendo para incluir o BottomSheetBehavior com as novas 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
fonte

Respostas:

226

Acontece que a ferramenta de refatoração no Android Studio Refactor > Migrate to AndroidXnão migrou corretamente o XML para BottomSheetBehaviour.

O local antigo foi android.support.design.widget.BottomSheetBehaviore não foi modificado pela ferramenta de migração. O 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"
    />

O novo local é com.google.android.material.bottomsheet.BottomSheetBehavior, portanto, o layout precisa 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
fonte
7
Passei o dia todo nisso. Esperançosamente, isso borbulhou para as pessoas descobrirem mais facilmente.
Adam Hurwitz,
Na última atualização do AS ainda não foi corrigido esse erro na migração do AndroidX. Obrigado
Genaut
Muito obrigado
Sardorbek Rkh
54

Você também pode substituir

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

de

app:layout_behavior="@string/bottom_sheet_behavior"
Jose M Lechon
fonte
1
Meu projeto, gerado a partir de um modelo do Android Studio, não tinha @string/bottom_sheet_behavior. Acho que fui capaz de puxá-lo adicionando implementation "com.google.android.material:material:1.1.0-alpha04"ao meuapp/build.gradle
Michael Osofsky
22

Você deve importar a Biblioteca de componentes de materiais fornecida pelo Google.

Componentes de material para Android é um substituto imediato para a Design Support Library do Android.

Adicione o seu build.gradle:

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

Então use a classe com.google.android.material.bottomsheet.BottomSheetBehavior.

Em seu layout, você pode usar o atributo:

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

ou

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