Показать / скрыть представление при перетаскивании 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 не вызывается, если я программно устанавливаю состояние на расширенное или свернутое.