Android中的项目下的RecyclerView标题

时间:2016-04-22 12:04:04

标签: android android-recyclerview

我找不到这种行为的解决方案:

LinkedIn Pulse

这是RecyclerView的标题是项目下的一点点。当然我猜它是RecyclerView。

我怎样才能实现这一目标?

修改

我所做的只是为回收者视图添加装饰。

这是我的简单装饰者:

public class HeaderItemDeceration extends RecyclerView.ItemDecoration {

    public HeaderItemDeceration() {
    }

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        if (parent.getChildAdapterPosition(view) == 0) {
            outRect.bottom = -100;
        }
    }
}

它正在工作,但问题是这个标题消失得太快,我的意思是下一个项目在顶部,在它下面有标题,并且立即消失,因为通常它应该被隐藏下一个项目位于顶部。

编辑2

我无法解释所有事情,所以我在这里解释。

就我而言,我不想拥有ActionBar。我想要的只是在RecyclerView下的图像,如上例所示,但没有折叠工具栏。只是让我们说我的Activity的样式是父Theme.AppCompat.Light.NoActionBar

考虑到我的解释和答案,我试图通过这样的布局来达到目标​​:

<?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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:fitsSystemWindows="true">

        <android.support.design.widget.CollapsingToolbarLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            app:layout_scrollFlags="scroll|exitUntilCollapsed">

        <ImageView
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:fitsSystemWindows="true"
            android:scaleType="fitXY"
            android:src="@drawable/header"/>

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

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

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

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

它几乎正常工作。差不多,因为我注意到了不必要的效果,当我滚动到顶部有时我必须重复滚动手势才能到达顶部。我录了它:

Bad effect recorded

我认为使用CollapsingToolbarLayout的目标可能是错误的。

3 个答案:

答案 0 :(得分:12)

当我为Scotts的草坪护理应用程序编写主要主屏幕时,我实现了这个效果。 Here is an image of how it looks.

这是通过使用CoordinatorLayout,AppBarLayout,CollapsingToolbarLayout和RecyclerView来完成的。关键是滚动视图行为,您需要在RecyclerView上设置app:behavior_overlapTopapp:layout_behavior="@string/appbar_scrolling_view_behavior"属性(仅当它是AppBarLayout的兄弟视图时才有效)。

在我的场景中,我将标题与RecyclerView完全分开。根据您的内容管理方式,此解决方案可能对您不起作用(尽管将标题保留在RV之外对我来说要简单得多 - 管理的视图类型/视图持有者少一个!)

这个要点最终看起来像这样:

<android.support.design.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fitsSystemWindows="true"
    >
  <android.support.design.widget.AppBarLayout
      android:layout_height="300dp" // fixed height of your header container
      android:layout_width="match_parent"
      android:fitsSystemWindows="true"
      >
    <android.support.design.widget.CollapsingToolbarLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fitsSystemWindows="true"
        app:layout_scrollFlags="scroll|exitUntilCollapsed|snap" // snap/exitUntilCollapsed are optional. See more info on scroll flags here: https://developer.android.com/reference/android/support/design/widget/AppBarLayout.LayoutParams.html#setScrollFlags(int)
        >
      <ImageView // This is where you'd put your header backdrop
          android:layout_width="match_parent"
          android:layout_height="match_parent"
          android:fitsSystemWindows="true"
          app:layout_collapseMode="parallax" // not essential, but most people want the parallax scrolling effect with their image header in this setup. this is how you would do it.
          />
    </CollapsingToolbarLayout>
  </AppBarLayout>
  <RecyclerView
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:overScrollMode="never"
    app:layout_behavior="@string/appbar_scrolling_view_behavior"
    app:behavior_overlapTop="64dp" // This is what you're looking for!
    />
</CoordinatorLayout>

答案 1 :(得分:1)

它是两个视图的组合,而不仅仅是回收者视图。

Android-ObservableScrollView将帮助您达到您想要的效果。

诀窍是,背景中有一个视图,前面有一个回收者。回收者视图有一个标题,可以从顶部创建您想要的空白。 每当您滚动回收器时,您将听到您使用的监听器的通知,并且您将手动滚动底部布局,

答案 2 :(得分:0)

尝试AppBarLayout的 layout_scrollFlags 的所有可能组合,这将有助于改进滚动

  1.   

    app:layout_scrollFlags =“scroll | snap”//试一下它会对你有用

  2.   

    app:layout_scrollFlags =“scroll | exitUntilCollapsed”//你当前的滚动

  3.   

    应用程式:layout_scrollFlags = “滚动| enterAlwaysCollapsed”

  4.   

    应用程式:layout_scrollFlags = “滚动| enterAlways”

  5. 并阅读scrolling-techniques-for-material-design