Я использовал BottomSheetBehavior с исходной библиотекой поддержки:
implementation 'com.android.support:design:27.1.1'
Когда я перешел на использование новых библиотек androidx, BottomSheetBehavior отсутствует. Отображение из указанной выше библиотеки поддержки также отсутствует в Список рефакторинга AndroidX, но инструмент миграции удалил его.
Что мне не хватает, чтобы включить BottomSheetBehavior с новыми библиотеками androidx.
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'
}
Оказывается, инструмент рефакторинга в Android Studio Refactor > Migrate to AndroidX неправильно перенес XML для BottomSheetBehaviour.
Старое расположение было android.support.design.widget.BottomSheetBehavior и не было изменено средством миграции. Исходный XML был:
<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"
/>
Новое местоположение - com.google.android.material.bottomsheet.BottomSheetBehavior, поэтому макет должен выглядеть следующим образом:
<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"
/>
В последнем обновлении от AS до сих пор не исправили эту ошибку в миграции AndroidX. Спасибо
Вы также можете заменить
app:layout_behavior = "com.google.android.material.bottomsheet.BottomSheetBehavior"
or
app:layout_behavior = "android.support.design.widget.BottomSheetBehavior"
от
app:layout_behavior = "@string/bottom_sheet_behavior"
В моем проекте, созданном на основе шаблона Android Studio, не было @string/bottom_sheet_behavior. Я думаю, что смог вытащить это, добавив implementation "com.google.android.material:material:1.1.0-alpha04" к моему app/build.gradle
Вам необходимо импортировать Библиотека компонентов материалов, предоставленный Google.
Material Components for Android is a drop-in replacement for Android's Design Support Library.
Добавьте в свой build.gradle:
implementation 'com.google.android.material:material:x.x.x'
Затем используйте класс com.google.android.material.bottomsheet.BottomSheetBehavior.
В вашем макете вы можете использовать атрибут:
app:layout_behavior = "com.google.android.material.bottomsheet.BottomSheetBehavior"
..>
или же
app:layout_behavior = "@string/bottom_sheet_behavior"
Я получил это сообщение об ошибке:
Didn't find class "com.google.android.material.bottomsheet.BottomSheetBehaviour"
Единственный способ решить эту проблему - изменить XML:
Change:
app:layout_behavior = "com.google.android.material.bottomsheet.BottomSheetBehavior"
Change to:
app:layout_behavior = "@string/bottom_sheet_behavior"
Это решило проблему
Я потратил на это целый день. Надеюсь, это появилось, чтобы людям было легче обнаружить.