Как свернуть анимированный AppBarLayout, не выталкивая содержимое, как в WhatsApp Android?

Как независимо свернуть панель инструментов при прокрутке RecyclerView во фрагменте ViewPager, чтобы эффект свертывания не влиял на ViewPager?

Я имею в виду, что в WhatsApp Android, если вы прокручиваете любой из 3 основных списков, панель инструментов не перемещается вместе с содержимым, вместо этого она имеет независимую ось анимации, которая очень плавная и не сдвигает представление содержимого. Вы можете видеть, если я немного двигаюсь вверх или вниз, RecycleView не толкается анимацией сворачивания панели инструментов, он перемещается независимо:

введите здесь описание изображения

У меня есть следующая иерархия в макете MainActivity:

<CoordinatorLayout>
    <AppBarLayout>
        <Toolbar/>
        <TabLayout/>
    </AppBarLayout>

    <ViewPager>
        <!-- Fragments with RecyclerView -->
    </ViewPager>

</CoordinatorLayout>

activity_main.xml

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:theme="@style/AppTheme.AppBarOverlay">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:layout_scrollFlags="scroll|snap|enterAlways"
            app:popupTheme="@style/AppTheme.PopupOverlay" />

        <android.support.design.widget.TabLayout
            android:id="@+id/tabs"
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fab"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|end"
        android:clickable="true"
        app:layout_behavior="ScrollingFABBehavior"
        android:layout_margin="@dimen/fab_margin"
        android:src="@android:drawable/ic_dialog_email" />

</android.support.design.widget.CoordinatorLayout>

А содержимое фрагмента — это RecyclerView:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    tools:context="fragments.ConversationsFragment">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_view"
        android:scrollbars="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</FrameLayout>

Но когда я прокручиваю RecyclerView, если я останавливаюсь на полпути, панель инструментов резко толкает фрагмент вверх или вниз, вместо того, чтобы двигаться независимо, как в WhatsApp: введите здесь описание изображения

В этом примере это еще более экстремально:

введите здесь описание изображения

И если я не добавляю привязку в качестве флага прокрутки, панель инструментов останавливается на полпути или также перемещает фрагмент, в зависимости от того, как далеко я прокручивал.

app:layout_scrollFlags="scroll|snap|enterAlways"

Как это сделать с помощью CoordinatorLayout? Если нет, будем признательны за любые указатели.


person AlfredBaudisch    schedule 08.03.2016    source источник
comment
Вы когда-нибудь находили ответ на эту проблему? Это беспокоило меня в последнее время.   -  person Andrew    schedule 26.03.2016
comment
@ Эндрю Я больше не беспокоился об этой проблеме, в итоге я сначала перешел к завершению всего дизайна приложения. Но как-нибудь позже еще раз посмотрю.   -  person AlfredBaudisch    schedule 26.03.2016
comment
здесь будет работать вложенная прокрутка... возьмите это как ссылку github.com/chrisbanes/cheesesquare   -  person GvSharma    schedule 13.06.2016
comment
Вы можете найти решение здесь. stackoverflow.com/questions/33737589/ Это хорошо работает для меня.   -  person Frosty    schedule 14.10.2016
comment
Никакие упомянутые здесь решения не работают для меня. Кто-нибудь нашел альтернативное решение?   -  person treesoft    schedule 19.11.2017


Ответы (1)


Используйте NestedScrollView для достижения аналогичного WhatsApp,

<android.support.v4.widget.NestedScrollView
    android:id="@+id/scroll"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipToPadding="false"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

</android.support.v4.widget.NestedScrollView>
person Mani TheEmperor    schedule 13.06.2016