используйте любой требуемый макет ограничения и передайте поведение макета
app:layout_behavior="app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior""
используйте в файле класса
используйте глобальную переменную
private var mBottomSheetBehavior: BottomSheetBehavior<*>? = null
В представлении создано
mBottomSheetBehavior = BottomSheetBehavior.from(view);
mBottomSheetBehavior?.peekHeight = 0
setBottomSheetAndCallBackBottomSheetBehaviour();
bottomSheetCollapsed();
bottomSheet?.visibility = View.VISIBLE
и при создании вашего представления вызывается метод и передается идентификатор макета и высота просмотра используется в первый раз для скрытого просмотра.
/**
* set bottom sheet behavior and state
*/
private fun setBottomSheetAndCallBackBottomSheetBehaviour() {
mBottomSheetBehavior?.state = BottomSheetBehavior.STATE_HIDDEN
//callback
mBottomSheetBehavior?.setBottomSheetCallback(object :
BottomSheetBehavior.BottomSheetCallback() {
override fun onStateChanged(bottomSheet: View, newState: Int) {
if (newState == BottomSheetBehavior.STATE_COLLAPSED) {
bottomSheetCollapsed()
}
}
override fun onSlide(bottomSheet: View, slideOffset: Float) {}
})
}
и Используйте следующий метод для расхода и свертывания.
private fun bottomSheetExpand() {
mBottomSheetBehavior?.state = BottomSheetBehavior.STATE_EXPANDED
}
private fun bottomSheetCollapsed() {
mBottomSheetBehavior?.state = BottomSheetBehavior.STATE_COLLAPSED
}
и по щелчку просмотра используйте
fun isExpendCollapse(){
if (mBottomSheetBehavior?.state == BottomSheetBehavior.STATE_COLLAPSED) {
bottomSheetExpand()
} else {
bottomSheetCollapsed()
}
}
check xml file CoordinatorLayout необходим для поведения нижнего листа
<android.support.design.widget.CoordinatorLayout
android:id="@+id/bottomSheet"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clickable="true"
android:clipToPadding="true"
android:visibility="gone"
app:behavior_hideable="true"
app:behavior_peekHeight="0dp"
android:layout_alignParentBottom="true"
>
<View
android:id="@+id/view"
android:layout_width="match_parent"
android:layout_height="300dp"
android:background="@color/colorAccent"
app:layout_behavior="app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior"
/>
</android.support.design.widget.CoordinatorLayout>
Вы можете ограничить макет, линейный или любой вид вместо просмотра. и я установил кординатную компоновку с относительной компоновкой (родительская компоновка), которую вы можете использовать согласно вашему требованию