向上滑动时向上滑动 RecyclerView,向下滑动时向下滑动 RecyclerView

Slide RecyclerView up as you swipe it up, or slide recyclerview down as you swipe down

我想创建一个 Fragment,其中 RecyclerView 向上滑动并在向上滑动时显示更多项目。

这是我所说的一个例子。

初始创建:

用户向上滑动 RecyclerView,显示更多项目:

有几个问题,我不想使用 CoordinatorLayout,我想将其设置为 RecyclerView 中的项目直接堆叠在 EditText.

这是我正在使用的布局代码:

<android.support.design.widget.CoordinatorLayout
android:id="@+id/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:visibility="visible">

<android.support.design.widget.AppBarLayout
    android:id="@+id/appBarLayout"
    android:layout_width="match_parent"
    android:layout_height="400dp"
    android:background="@android:color/transparent"
    android:fitsSystemWindows="true"
    android:orientation="vertical">

    <android.support.design.widget.CollapsingToolbarLayout
        android:id="@+id/collapsingToolbar"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@android:color/transparent"
        android:fitsSystemWindows="true"
        app:layout_scrollFlags="scroll|exitUntilCollapsed">

        <View
            android:id="@+id/emptyView"
            android:layout_width="match_parent"
            android:layout_height="400dp"
            android:background="@android:color/transparent"
            app:layout_collapseMode="parallax"/>

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

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

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

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical">

        <EditText
            android:id="@+id/editText"
            android:paddingLeft="16dp"
            android:inputType="textAutoCorrect"
            android:layout_centerVertical="true"
            android:background="@android:color/transparent"
            android:layout_width="match_parent"
            android:layout_height="56dp"/>

    </RelativeLayout>

</RelativeLayout>

我得到这样的结果:

这绝对是不可扩展的,需要对空视图进行一致的测量。

对 2 种类型的行使用 RecyclerView

  1. 空 row/rows 灰色(无分隔线)
  2. 具有您已有内容的行

RecyclerView 将不得不 match_parent 到整个片段

因此您将在 RecyclerView.

顶部获得 "blank" 区域的正确效果

您可以使用 setReverseLayout 的 LinearLayoutManager

Used to reverse item traversal and layout order. This behaves similar to the layout change for RTL views. When set to true, first item is laid out at the end of the UI, second item is laid out before it etc. For horizontal layouts, it depends on the layout direction. When set to true, If RecyclerView is LTR, than it will layout from RTL, if RecyclerView} is RTL, it will layout from LTR. If you are looking for the exact same behavior of setStackFromBottom(boolean), use setStackFromEnd(boolean)

我通过使用自定义 TouchListener 解决了这个问题,所有其他解决方案都非常基础,仅限于特定的盒装用例。

我这样做的方法是基于这个库实现一个新的 TouchListener

BounceTouchListener

我得到以下结果: