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

Scroll certain views in coordinator layout with RecyclerView

你好,我有 CoordinatorLayoutAppBarToolbarRecyclerView

<?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 不会回收视图持有者,所以它对我不起作用。

任何人都可以帮助实现这个目标吗?

像这样尝试

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

将您的工具栏和线性布局放在 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

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