У меня довольно комплекс BottomSheetLayout
, который выглядит следующим образом
Корневой вид моего нижнего листа - это пользовательский FrameLayout
, который позволяет скруглить его угол (как фоновый, так и дочерний). Ничего другого (ничего касающегося)
Затем я использую обычный ConstraintLayout
для разметки моего нижнего листа.
Этот ConstraintLayout
содержит, помимо прочего, вертикальный RecyclerView
:
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginTop="10dp">
<!-- other views -->
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/events"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginTop="25dp"
android:layout_marginBottom="74dp"
app:layout_constraintTop_toBottomOf="@+id/days"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
android:background="@{viewModel.colors.defaultBackgroundColor}"
tools:background="#ECF0F3"
android:orientation="vertical"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:listitem="@layout/event_item"
tools:itemCount="10" />
</androidx.constraintlayout.widget.ConstraintLayout>
У меня нет особых проблем при перетаскивании моего нижнего листа, однако при полном раскрытии я ожидал, что смогу прокрутить содержимое моего RecyclerView
. Но я не могу.
После многих исследований мне удалось сделать это прокруткой, включив прокрутку, когда мое мнение Fragment
завышено:
ViewCompat.setNestedScrollingEnabled(this.binding.bottomSheetEvents.getRoot(), true);
Однако это имеет странное следствие. Когда состояние моего нижнего листа равно EXPANDED
, я, наконец, могу прокрутить свой RecyclerView
, но тогда уже нет абсолютно никакого способа перетащить мой Нижний лист: он остается полностью развернутым.
Я пробовал несколько других способов.
- Я попытался обернуть
NestedScrollView
. В прошлом я мог прокручивать все содержимое нижнего листа благодаря NestedScrollView
, но в этом случае я хочу прокрутить только RecyclerView
. Все, что выше, должно оставаться без дела.
- Я устал
this.binding.bottomSheetEvents.events.setNestedScrollingEnabled(false);
, но нет никакой разницы.
Я считаю, что когда нижний лист полностью раскрывается, он отправляет события прокрутки внутренним дочерним элементам, которые могут его поддерживать. И, наоборот, он знает, в какой-то момент, когда использует желание свернуть упомянутый нижний лист. Так что, наверное, там что-то не так.
Дополнительная информация:
- эта нижняя таблица включена в мой фрагмент, вид корней которого, очевидно,
CoordinatorLayout
.
- фрагмент также размещен в
CoordinatorLayout
с AppBar
- включаемый макет использует
app:layout_behavior="@string/bottom_sheet_behavior"
- и макет включения также использует
behavior_fitToContents
, установленный на false , так что я могу использовать метод setExpandedOffset
, чтобы нижний лист не достигал вершины.
- Используемая версия: 1.1.0-alpha07
Спасибо за помощь!