Показать / скрыть представление при перетаскивании BottomSheetDialogFragment с 3 уровнями состояния

У меня есть сценарий, когда BottomSheetDialogFragment появится снизу и попросит изменить страницу, если пользователь нажмет "Да" или перетащит нижний лист вверх; первое представление (cl_collapsed_container) уйдет с анимацией, а новое представление (cl_expanded_container) появится также с анимацией.

Я перепробовал так много комбинаций, но не смог.

вот мой xml;

<androidx.coordinatorlayout.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:id="@+id/rl_customize_container"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:behavior_hideable="false"
        app:behavior_peekHeight="300dp"
        app:layout_behavior="@string/bottom_sheet_behavior">

        <TextView
            android:id="@+id/tv_headline"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerHorizontal="true"
            android:layout_marginTop="@dimen/margin_large"
            android:text="@string/customize_your_feed"
            android:textColor="@color/black" />

        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/cl_collapsed_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_below="@id/tv_headline">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

            <androidx.appcompat.widget.AppCompatButton
                android:id="@+id/btn_customize"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="@string/customize"
                app:layout_constraintTop_toBottomOf="@id/tv_desc" />

        </androidx.constraintlayout.widget.ConstraintLayout>

        <androidx.constraintlayout.widget.ConstraintLayout
            android:id="@+id/cl_expanded_container"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical"
            android:layout_below="@id/cl_collapsed_container"
            android:visibility="gone"
            >

            <androidx.appcompat.widget.AppCompatButton
                android:id="@+id/button10"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:layout_constraintTop_toTopOf="parent"
                android:text="Button 10" />

            <androidx.appcompat.widget.AppCompatButton
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                app:layout_constraintBottom_toBottomOf="@+id/button10"
                android:text="Button 9"/>

        </androidx.constraintlayout.widget.ConstraintLayout>

    </RelativeLayout>

</androidx.coordinatorlayout.widget.CoordinatorLayout>

мой код:

val bottomSheetBehavior = BottomSheetBehavior.from(binding.rlCustomizeContainer)

    bottomSheetBehavior.apply {
        halfExpandedRatio = 0.3f
        bottomSheetBehavior.state = BottomSheetBehavior.STATE_HALF_EXPANDED
    }

    binding.btnCustomize.setOnClickListener {
        binding.clCollapsedContainer.visibility = View.GONE
        binding.clExpandedContainer.visibility = View.VISIBLE
        bottomSheetBehavior.state = BottomSheetBehavior.STATE_EXPANDED
    }


    bottomSheetBehavior.addBottomSheetCallback(object: BottomSheetBehavior.BottomSheetCallback(){
        override fun onStateChanged(view: View, newState: Int) {
            Log.i("onStateChanged:" , newState.toString())
        }

        override fun onSlide(p0: View, p1: Float) {
            Log.i("onSlide:" , p1.toString())
        }

    })

Я не могу перетащить страницу вверх (мне нужно%90 экрана как максимальная высота), этот код не будет учитывать высоту взгляда и скрытые свойства. не имеет значения, какое значение я добавляю к высоте взгляда, он использует половину экрана и отображает половину свернутого представления. Также обратный вызов onSlide не вызывается, если я программно устанавливаю состояние на расширенное или свернутое.

0 ответов

Другие вопросы по тегам