使用RecyclerView在协调器布局中滚动某些视图

时间:2017-11-02 13:15:59

标签: android android-recyclerview android-coordinatorlayout android-appbarlayout

您好我CoordinatorLayout AppBarToolbarRecyclerView

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

<android.support.design.widget.AppBarLayout
    android:id="@+id/appbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:elevation="0dp"
    android:fitsSystemWindows="true"
    app:elevation="0dp">

    <android.support.v7.widget.Toolbar
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:elevation="8dp"
        android:fitsSystemWindows="true"
        app:contentInsetEnd="0dp"
        app:contentInsetStart="0dp"/>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"/>

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

<android.support.v7.widget.RecyclerView
    android:id="@+id/rv_photos"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:nestedScrollingEnabled="false"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"/>
</android.support.design.widget.CoordinatorLayout>

我想将Toolbar留在最顶层,不想移动它,但让LinearLayout滚动到它下方(Toolbar下)。

我还发现RecyclerView不支持Coordinator布局。它不会触发AppBar滚动事件。如果我将它包装在NestedSCrollView中它将起作用,但RecyclerView不会回收视图持有者,所以它对我不起作用。

有人可以帮助实现这个目标吗?

3 个答案:

答案 0 :(得分:0)

试试这个

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

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

            <android.support.v7.widget.RecyclerView
                android:id="@+id/rv_photos"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:nestedScrollingEnabled="false"
                app:layout_behavior="@string/appbar_scrolling_view_behavior"
                />
</android.support.v4.widget.NestedScrollView>

答案 1 :(得分:0)

将工具栏和线性布局放在CollapsingToolbarLayout中。然后使用适当的折叠模式属性。例如,您可以使用pin作为工具栏,使用parallax作为线性布局:

<android.support.design.widget.AppBarLayout>
    <android.support.design.widget.CollapsingToolbarLayout
        ...
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

        <android.support.v7.widget.Toolbar
            ...
            app:layout_collapseMode="pin"/>

        <LinearLayout
            ...
            app:layout_collapseMode="parallax"/>

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

您需要在应用的build.gradle

中设计支持库的依赖项

implementation "com.android.support:design:$support_library_version"

More on coordinator and collapsing toolbar layouts

答案 2 :(得分:0)

我无法以描述的方式实现它。 RecyclerView不会将滚动事件发送到AppaBar布局(这真的很奇怪)所以我需要拆分该屏幕上的每个视图,并使Recycler视图适配器在一个回收站视图中处理它们。谢谢大家的答案和花在这上面的时间!