Intereting Posts

Заголовок 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; } } } 

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

EDIT 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> 

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

Плохой эффект

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

Solutions Collecting From Web of "Заголовок RecyclerView под элементами в Android"

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

Это достигается с помощью CoordinatorLayout, AppBarLayout, CollapsingToolbarLayout и RecyclerView. Ключ – это поведение с прокруткой, которое необходимо установить app:behavior_overlapTop атрибутов 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> 

Его сочетание двух видов, а не просто просмотр ресайклеров.

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

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

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

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

  2. App: layout_scrollFlags = "scroll | exitUntilCollapsed" // текущая прокрутка ur

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

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

И читать прокрутку-методы для материального дизайна