Отключить автоматическую прокрутку AppBarLayout при расширении

#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 .