向下滚动时不要折叠AppBarLayout

时间:2018-07-07 15:08:51

标签: android android-coordinatorlayout android-appbarlayout

我有一个这样布局的片段

    <?xml version="1.0" encoding="utf-8"?>
    <android.support.design.widget.CoordinatorLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

    <android.support.design.widget.AppBarLayout
        android:background="?attr/cropperBckColor"
        android:id="@+id/appBarLayout"
        android:layout_width="match_parent"
        android:layout_height="@dimen/cropper_height"
        android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar">

        <android.support.design.widget.CollapsingToolbarLayout
            android:id="@+id/collapsingToolBarLayout"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_scrollFlags="scroll|exitUntilCollapsed"
            app:statusBarScrim="@android:color/transparent"
            app:contentScrim="@color/transparent">

            <com.paralect.mediapicker.custom_views.cropper.ImageCropperView
                android:id="@+id/image"
                app:layout_collapseMode="parallax"
                app:layout_collapseParallaxMultiplier="0.0"
                android:layout_width="match_parent"
                android:layout_height="match_parent"/>

            <android.support.v7.widget.Toolbar
                app:layout_collapseMode="pin"
                app:contentInsetLeft="0dp"
                app:contentInsetStart="0dp"
                android:layout_gravity="bottom"
                android:layout_width="match_parent"
                android:layout_height="@dimen/my_tab_height">
                <RelativeLayout
                    android:layout_width="match_parent"
                    android:layout_height="match_parent">
                    <android.support.v7.widget.AppCompatImageView
                        android:layout_alignParentBottom="true"
                        style="@style/Icon"
                        android:src="@drawable/ic_rezoom"
                        android:id="@+id/rezoom"
                        android:layout_alignParentLeft="true"
                        android:layout_alignParentStart="true" />

                    <android.support.v7.widget.AppCompatImageView
                        android:layout_alignParentBottom="true"
                        style="@style/Icon"
                        android:src="@drawable/ic_multiple_disabled"
                        android:id="@+id/multiSelect"
                        android:layout_alignParentEnd="true"
                        android:layout_alignParentRight="true" />
                </RelativeLayout>
            </android.support.v7.widget.Toolbar>
        </android.support.design.widget.CollapsingToolbarLayout>
    </android.support.design.widget.AppBarLayout>
</android.support.design.widget.CoordinatorLayout>

协调器布局按预期工作,但我想更改AppBarLayout的行为,即在向下滚动回收器视图时使其折叠,但在滚动AppBarLayout时使其折叠。

我该怎么做?

预先感谢

2 个答案:

答案 0 :(得分:1)

根据android documentation for RecyclerView实现RecyclerView.OnScrollListener包含方法OnScroll(...),该方法包含delta_x和delta_y。使用delta_y值可用于检测y方向位移的变化。因此,

if( dy > 0 ) { you're scrolling in the positive vertical direction }

else if( dy < 0 ) { you're scrolling in the negative vertical direction }

else { dy == 0, you're not scrolling or the visible item changed }

了解此逻辑,if(dy <0){不会折叠AppBarLayout},您可以根据android documentation for AppBarLayout使用setScrollFlags(int)来实现此目的。

答案 1 :(得分:0)

在您的活动课程中进行以下更改

toolbar.setCollapsible(false);

在您的 XML文件

app:layout_scrollFlags="snap"

用于CollapsingToolbarLayout

此更改将避免向下滚动时AppBarLayout崩溃。

希望这行得通。