如何正确使用CoordinatorLayout折叠列表头(无工具栏)

时间:2018-08-05 12:26:16

标签: android android-layout

我正在尝试使用recyclerview实现简单的视差标头。

这里没什么好看的。仅遵循文档,博客,指南,甚至stackoverflow答案。但是每个人都只是复制了文档,并使用toobar实现了该文档。我不要在这里的工具栏。而且,使用CoordinatorLayout不能立即使用。现有的解决方案包括向RecyclerView添加伪造的标题项,或将标题与ListView一起使用。这似乎是CoordinatorLayout体系结构的过时和过时的。

如果我正确理解,appbar_scrolling_view_behavior仅可以在AppBarLayout的直接层次结构中使用。这就是为什么它不起作用。 我在支持库中找到了2个类:HeaderScrollingViewBehavior和HeaderBehavior。但是它们是抽象的,而具体的类是AppBarLayout的内部。

有人成功实现了CoordinatorLayout的自定义行为,因此它同时支持RecyclerView和标头视图吗? NestedScrollView可以轻松解决问题吗? (似乎没有)。

我的布局曾经具有以下层次结构:

DrawerLayout  
  CoordinatorLayout  
    (include code, see below)
    LinearLayout fullscreen (for fragments)
    FrameLayout fullscreen (for popup fragments)
    AppBarLayout/Toolbar

“包含”代码层次结构:

(Some stacked layouts (constraintlayout) including "ctobar")
<android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="0dp"
    app:layout_constraintTop_toBottomOf="@+id/ctobar"
    app:layout_constraintBottom_toBottomOf="parent"
    >

    <include
        android:id="@+id/collapsibleHeader"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintTop_toBottomOf="@+id/ctobar"
        android:minHeight="10dp"
        app:layout_collapseMode="parallax"
        app:layout_scrollFlags="scroll|exitUntilCollapsed"
        app:layout_anchor="@+id/swipeRefresh"
        app:layout_anchorGravity="top"
        layout="@layout/fragment_homeroot_home_streamheader" />

    <mvxui.MvxSwipeRefreshLayout2
        android:id="@+id/swipeRefresh"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_constraintTop_toBottomOf="@+id/collapsibleHeader"
        app:layout_constraintBottom_toBottomOf="parent"
        app:MvxBind="RefreshCommand PullToRefreshCommand"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        >
        <mvxui.MvxRecyclerView2
            android:id="@+id/list"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            app:layout_constraintTop_toBottomOf="@+id/collapsibleHeader"
            app:layout_constraintBottom_toBottomOf="parent"
            android:scrollbars="none"
            android:divider="@color/accent"
            android:animateLayoutChanges="false"
            app:MvxItemTemplates="fragment_homeroot_home_streamcell_normal,fragment_homeroot_home_streamcell_unsaved"
            app:MvxBind="ItemsSource StreamCells; ItemClick FlightDetailCommand"
            />
    </mvxui.MvxSwipeRefreshLayout2>

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

我的新布局具有以下层次结构:

CoordinatorLayout SwipeRefreshLayout (match_parent/match_parent, layout_behavior1: custom TBD) RecyclerView MyHeaderView (match_parent/wrap_content, layout_behavior2: custom TBD)

您要在layout_behavior1 / layout_behavior2中放什么?

1 个答案:

答案 0 :(得分:0)

我自己编写了解决方案,因为似乎没人感兴趣。也许这会引起一些人的兴趣。请检查它there,因为它很长。