Из документации я прочитал, что модальный нижний лист должен блокировать главный экран и накладывать на него оттенок.Я думал, что все, что нужно сделать, это расширить BottomSheetDialogFragment
, и это сработает.Есть ли свойство, которое не устанавливается?
Класс нижнего листа:
class BottomTimeSheet: BottomSheetDialogFragment() {
private lateinit var bottomSheetLayout: ConstraintLayout
private lateinit var bottomSheetBehavior: BottomSheetBehavior<ConstraintLayout>
private lateinit var bottomSheetCloseBtn: MaterialButton
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.bottom_sheet, container, false)
bottomSheetCloseBtn = view.findViewById(R.id.bottom_sheet_btn1)
bottomSheetLayout = view.findViewById(R.id.bottom_sheet_layout)
bottomSheetBehavior = BottomSheetBehavior.from(bottomSheetLayout)
bottomSheetBehavior.setBottomSheetCallback(object: BottomSheetBehavior.BottomSheetCallback(){
override fun onSlide(bottomSheet: View, slideOffset: Float) {
}
override fun onStateChanged(bottomSheet: View, newState: Int) {
Log.d(TAG, "newState: $newState")
}
})
bottomSheetCloseBtn.setOnClickListener {
hideBottomTimeSheet()
}
return view
}
fun showBottomTimeSheet(){
if(bottomSheetBehavior.state == BottomSheetBehavior.STATE_COLLAPSED){
bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
}
}
fun hideBottomTimeSheet(){
if(bottomSheetBehavior.state == BottomSheetBehavior.STATE_EXPANDED){
bottomSheetBehavior.state = BottomSheetBehavior.STATE_COLLAPSED
}
}
companion object {
val TAG = BottomTimeSheet::class.java.toString()
}
}
bottom_sheet.xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/bottom_sheet_container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="end">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/bottom_sheet_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="end"
app:behavior_peekHeight="0dp"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
<com.google.android.material.textview.MaterialTextView
android:id="@+id/bottom_sheet_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="This is a bottom sheet"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"/>
<com.google.android.material.button.MaterialButton
android:id="@+id/bottom_sheet_btn1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/bottom_sheet_text"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
style="@style/Widget.MaterialComponents.Button"
/>
<com.google.android.material.button.MaterialButton
android:id="@+id/bottom_sheet_btn2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@id/bottom_sheet_btn1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
style="@style/Widget.MaterialComponents.Button"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.coordinatorlayout.widget.CoordinatorLayout>
Нижний лист сдвигается вверх, но вы можете видеть, что на главном экране нет ни оттенка, ни блокировки.Кнопки на главном экране по-прежнему доступны для нажатия.
Редактировать: Я создаю и запускаю нижний лист, как этот элемент
private lateinit var bottomTimeSheet: BottomTimeSheet
bottomTimeSheet = BottomTimeSheet
bottomTimeSheet.showBottomTimeSheet()
в main_activity.xml:
<fragment
android:id="@+id/bottom_sheet_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:name="com.ds.base.fragments.BottomTimeSheet"
tools:layout="@layout/bottom_sheet"/>