У меня есть макет BottomSheetBehavior, который выглядит следующим образом:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/bottom_sheet"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/white"
android:orientation="vertical"
app:behavior_hideable="false"
app:behavior_peekHeight="76dp"
app:layout_behavior="com.google.android.material.bottomsheet.BottomSheetBehavior">
<LinearLayout
android:id="@+id/bottomSheetPeekLayout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/bottomSheetEditText"
android:layout_width="match_parent"
android:layout_height="44dp"
android:layout_margin="16dp"/>
<include
android:id="@+id/bottomSheetDynamicHeightLayout"
layout="@layout/layout_bottom_sheet_dynamic_height"
android:visibility="gone" />
</LinearLayout>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/bottomSheetRecyclerView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</LinearLayout>
Встроен в CoordinatorLayout
в Activity:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="44dp"
android:background="@color/white">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/closeIcon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:layout_marginTop="4dp"
android:padding="12dp"
android:src="@drawable/ic_close_point_chooser" />
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:gravity="center"
android:textAllCaps="true"
android:textColor="#3f454e"
android:textSize="14sp" />
</FrameLayout>
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.fragment.app.FragmentContainerView
android:id="@+id/mapFragmentContainerView"
android:name="com.google.android.gms.maps.SupportMapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:focusableInTouchMode="true" />
<include
android:id="@+id/bottomSheetLayout"
layout="@layout/bottom_sheet_layout"
android:paddingTop="44dp" />
</androidx.coordinatorlayout.widget.CoordinatorLayout>
</LinearLayout>
Необходимо изменить высоту просмотра BottomSheet, в зависимости от высоты bottomSheetDynamicHeightLayout
, которая представляет собой макет ограничения, отображающий некоторые данные. Я наблюдаю изменения высоты на этом макете и обновляю BottomSheetBehavior следующим образом:
bottomSheetPeekLayout.addOnLayoutChangeListener { v, left, top, right, bottom, oldLeft, oldTop, oldRight, oldBottom ->
bottomSheetBehavior.setPeekHeight(bottomSheetPeekLayout.height, true)
}
Поэтому, когда изменяется высота моего просмотра, высота просмотра BottomSheet изменяется с помощью setPeekHeight (int peekHeight, boolean animate) Metood, который согласно документации должен оживлять изменения высоты.
Однако этого не происходит - высота просмотра обновляется, а нижний лист меняет размер просмотра, но анимация отсутствует - он просто меняет размер экрана. Когда я использовал этот метод ранее, чтобы обновить высоту вручную (не в onLayoutChangedListener
), анимация работала нормально.
Что-то мне не хватает? Это какая-то ошибка или желаемое поведение? Разве параметр animate
не должен всегда анимировать переход? И как мне получить желаемый эффект?