Заголовок RecyclerView под элементами в Android

Я не могу найти решение для такого поведения:

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, как в примере выше, но без сбрасывания панели инструментов. Просто скажите, что моя активность имеет стиль, родительский 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>

Он почти работает. Почти, потому что я заметил нежелательный эффект, то есть когда я прокручиваю вверх, иногда мне приходится повторять жест прокрутки, чтобы достичь вершины. Я записал его:

Плохо зафиксированный эффект

Я предполагаю, что с моей целью использование CollapsingToolbarLayout может быть неправильным.

Ответ 1

Я достиг этого эффекта, когда я написал главный главный экран для приложения для ухода за газонами для Scotts. Вот изображение того, как это выглядит.

Это достигается с помощью CoordinatorLayout, AppBarLayout, CollapsingToolbarLayout и RecyclerView. Ключ - это поведение просмотра прокрутки, которое необходимо установить для атрибутов app:behavior_overlapTop и app:layout_behavior="@string/appbar_scrolling_view_behavior" в RecyclerView (которые работают только в том случае, если это представление для дочернего узла 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>

Ответ 2

Это комбинация из двух представлений, а не только просмотр ресайклеров.

Android-ObservableScrollView поможет вам достичь желаемого.

Фокус в том, что есть фон в фоновом режиме и ресайклинг впереди. В представлении recycler есть заголовок, который делает желаемый промежуток от вершины. Всякий раз, когда вы прокручиваете ресайклеров, вы будете уведомлены слушателем, который вы использовали, и тем, что вы будете вручную прокручивать нижний макет,

Ответ 3

попробуйте все возможные комбинации layout_scrollFlags AppBarLayout, это поможет в улучшении прокрутки

  • app: layout_scrollFlags = "scroll | snap" // попробуйте, это сработает для вас

  • app: layout_scrollFlags = "scroll | exitUntilCollapsed" // текущий текущий прокрутка

  • Приложение: layout_scrollFlags = "свиток | enterAlwaysCollapsed"

  • Приложение: layout_scrollFlags = "Спиральные | enterAlways"

и прочитайте scrolling-techniques-for-material-design