#android #kotlin #android-recyclerview #android-appbarlayout
#Android #kotlin #android-recyclerview #android-appbarlayout
Вопрос:
У меня есть AppBarLayout, который расширяется, если пользователь немного прокручивает список вниз, и он возвращается через 2 секунды, если пользователь больше не прокручивает. Однако раздражает то, что AppBarLayout также прокручивает RecyclerView на величину высоты AppBarLayout. Таким образом, список остается в том же положении, в котором пользователь остановился в списке, поэтому список не перемещается, однако окно просмотра перемещается, и я хотел бы отключить это, если это возможно.
Единственный способ, которым это работает, — это когда я поместил ViewPager (в нем позже фрагмент, содержащий RecyclerView) над AppBarLayout и удалил app:layout_behavior
.
<androidx.coordinatorlayout.widget.CoordinatorLayout
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/divider_logo">
<androidx.viewpager.widget.ViewPager
android:id="@ id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<com.google.android.material.appbar.AppBarLayout
android:id="@ id/app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:color/white"
app:elevation="0dp"
app:layout_behavior="com.my.app.sava.main.AppBarLayoutBehavior">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:layout_scrollFlags="scroll|enterAlways">
<View
android:id="@ id/tv_location_bg"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@color/colorPrimaryLight"
app:layout_constraintBottom_toBottomOf="@id/tv_location"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/tv_location" />
.
.
.
Однако при желании прокрутки возникает задержка, потому что AppBarLayout прокручивается первым без перемещения списка, затем начинает прокручиваться RecyclerView.
Комментарии:
1. Вам нужно расширить
ScrollingViewBehavior
, чтобы исправить это и установить свое пользовательское поведениеViewPager
. Но вам нужно прочитать исходный код, в котором я не разбираюсьCoordinatorLayout
.