Почему мой модальный нижний лист не блокирует основной экран? - PullRequest
0 голосов
/ 19 сентября 2019

Из документации я прочитал, что модальный нижний лист должен блокировать главный экран и накладывать на него оттенок.Я думал, что все, что нужно сделать, это расширить 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>

enter image description here

Нижний лист сдвигается вверх, но вы можете видеть, что на главном экране нет ни оттенка, ни блокировки.Кнопки на главном экране по-прежнему доступны для нажатия.

Редактировать: Я создаю и запускаю нижний лист, как этот элемент

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"/>
...