Super fast and easy way to create header for Android RecyclerView
.
Lets you create header View
for any RecyclerView
that uses LinearLayoutManager
or GridLayoutManager
with just a simple method call.
Although the library is super easy to use, it has some limitations.
RecyclerViewHeader
is based on a ViewGroup
being hovered over the RecyclerView
(and properly shifted on scroll).
You need to bare in mind that the library is created to be used with relatively simple headers.
E.g. if your header uses a complex layout (with multiple scrolls and focusable elements) or a complicated Touch
management system I advice you not to use RecyclerViewHeader
, but a proper RecyclerView
Adapter
that incorporates inflating multiple types of views.
There are other libraries on github (for example HeaderRecyclerView by Karumi) that might seem a bit more complicated to use, but are implementing mentioned approach and will fit your needs better.
TLDR:
- Simple header
- Header smaller than screen height (for vertical
RecyclerView
) or width (for horizontalRecyclerView
) - No complicated touch system (including vertical scrolling elements)
I created this library back in the day when I thought RecyclerView
was all new and difficult. Writing an adapter that could inflate multiple types of Views
seemed like a difficult job to do.
Not long after I released RecyclerViewHeader
I found out that's an incredibly easy task to perform especially if you have tools like HeaderRecyclerView
by Karumi.
Using a specialized adapter was fixing all the flaws that RecyclerViewHeader
was suffering from.
The aim of the second version was to fix all the issues users were facing. The problem is, while I was developing the second version, I was thinking about killing this library multiple times. I was finding multiple aspects of the approach it presents, to be problematic for someone who doesn't understand the concept of the library thoroughly (usage with simple headers).
I decided to finish the second version as a token of gratitude, for all your support. Thank you!
Nonetheless, as of today (06/04/2016) I'm beginning the process of retiring of the RecyclerViewHeader
library.
Version 2.0.0
will be the last major release. The only new development will contain fixes for critical bugs (with the exception of re-enabling StaggeredGridLayoutManager
support).
For a working implementation of this library see the sample/
folder.
-
Place
RecyclerViewHeader
layout above (z-order-wise) yourRecyclerView
at the top part of it.<android.support.v7.widget.RecyclerView android:id="@+id/recycler" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal|top" /> <com.bartoszlipinski.recyclerviewheader2.RecyclerViewHeader android:id="@+id/header" android:layout_width="match_parent" android:layout_height="100dp" android:layout_gravity="center_horizontal|top"> <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="header"/> </com.bartoszlipinski.recyclerviewheader2.RecyclerViewHeader>
-
Get the
RecyclerViewHeader
view object with:RecyclerViewHeader header = (RecyclerViewHeader) findViewById(R.id.header);
-
Attach
RecyclerViewHeader
to yourRecyclerView
:RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view); // set LayoutManager for your RecyclerView header.attachTo(recyclerView);
RecyclerViewHeader
needs to be called after you've set the LayoutManager
for your RecyclerView
.
Current implementation of the library can be used with RecyclerViews
that use LinearLayoutManager
or GridLayoutManager
.
You can grab the library via Maven Central. Just add a proper dependency inside your build.gradle
. Like this:
dependencies {
compile 'com.bartoszlipinski:recyclerviewheader2:2.0.1'
}
- Bartosz Lipiński
Copyright 2015 Bartosz Lipiński
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.