Dividers alternatives and similar packages
Based on the "Recyclerview Widget" category.
Alternatively, view Dividers alternatives based on common mentions on social networks and blogs.
-
recyclerview-animators
An Android Animation library which easily add itemanimator to RecyclerView items. -
UltimateRecyclerView
A RecyclerView(advanced and flexible version of ListView in Android) with refreshing,loading more,animation and many other features. -
XRecyclerView
A RecyclerView that implements pullrefresh and loadingmore featrues.you can use it like a standard RecyclerView -
android-advancedrecyclerview
RecyclerView extension library which provides advanced features. (ex. Google's Inbox app like swiping, Play Music app like drag and drop sorting) -
sticky-headers-recyclerview
DISCONTINUED. [UNMAINTAINED] Sticky Headers decorator for Android's RecyclerView -
RecyclerView-FlexibleDivider
Android library providing simple way to control divider items (ItemDecoration) of RecyclerView -
ScrollablePanel
A flexible view for providing a limited rect window into a large data set,just like a two-dimensional RecyclerView. It different from RecyclerView is that it's two-dimensional(just like a Panel) and it pin the itemView of first row and first column in their original location. -
RecyclerViewEnhanced
Android Library to provide swipe, click and other functionality to RecyclerView -
SectionedRecyclerView
DISCONTINUED. An adapter to create Android RecyclerViews with sections, providing headers and footers. -
RecyclerView-MultipleViewTypesAdapter
Android library defining adapter classes of RecyclerView to manage multiple view types -
RecyclerViewSwipeDismiss
A very easy-to-use and non-intrusive implement of Swipe to dismiss for RecyclerView. -
PowerfulRecyclerViewAdapter
A Common RecyclerView.Adapter implementation which supports all kind of items and has useful data operating APIs such as remove,add,etc. -
recyclerview-binder
Android library for RecyclerView to manage order of items and multiple view types. -
InfiniteRecyclerView
A RecyclerView Adapter which allows you to have an Infinite scrolling list in your apps -
VsRecyclerView
The library that removes all boilerplate code allowing you to display lists with few lines of code. -
android RecyclerView support Header Footer and Empty list
android RecyclerView support Header Footer and Empty list
CodeRabbit: AI Code Reviews for Developers
* Code Quality Rankings and insights are calculated and provided by Lumnify.
They vary from L1 to L5 with "L5" being the highest.
Do you think we are missing an alternative of Dividers or a related project?
README
Dividers
Dividers is an Android library to easily create separators for your RecyclerViews. It supports a wide range of dividers from simple ones, that apply to all your items equally, to a system of selectors that apply different styles to each item.
Screenshots
[Demo screenshot][1]
Usage
The easiest way to start using Dividers
is to create a DividerItemDecoration
with a layer and provide it to your RecyclerView
as follows:
// Create a drawable for your divider
Drawable exampleDrawable = getResources().getDrawable(R.drawable.example_drawable);
// Create a DividerItemDecoration instance with a single layer and add it to your recycler view
RecyclerView.ItemDecoration itemDecoration = new DividerItemDecoration(new Layer(DividerBuilder.get().with(exampleDrawable).build()));
recyclerView.addItemDecoration(itemDecoration);
If you want to use all the features of Dividers
follow these steps:
- Create a collection of instances of
Layer
with the help ofLayersBuilder
to define the drawables you want to apply. EachLayer
is composed of: - An implementation of the
Selector
interface, defining which items are going to be affected by the layer. You can use one of the multiple implementations that come in the library or create your own.
public class HighRatingMovieSelector implements Selector {
private final List<Movie> movies;
private final int maxHighRating;
public HighRatingMovieSelector(List<Movie> movies, int maxHighRating) {
this.movies = movies;
this.maxHighRating = maxHighRating;
}
@Override public boolean isPositionSelected(Position position) {
return movies.get(position.getAbsoluteIndex()).getRating() >= maxHighRating;
}
@Override public EnumSet<Direction> getDirectionsByPosition(Position position) {
return EnumSet.allOf(Direction.class);
}
}
- An instance of
Divider
, containing the drawable that is going to be used to render the separator. Create them using theDividerBuilder
class.
Drawable drawable = getResources().getDrawable(R.drawable.example_divider);
Divider divider = DividerBuilder.from(highlightedDrawable).build()
- Finally, create a collection of
Layer
instances with the help ofLayersBuilder
Collection<Layer> layers = LayersBuilder.with(new Layer(new HighRatingMovieSelector(), divider)).build();
- Create a new instance of
DividerItemDecoration
with your newly created layers.java RecyclerView.ItemDecoration itemDecoration = new DividerItemDecoration(layers);
- Add your
DividerItemDecoration
to yourRecyclerView
using theaddItemDecoration
method.java recyclerView.addItemDecoration(itemDecoration);
Selectors
Selectors give you the possibility to apply different configurations to a fixed set of items of your view. There are multiple implementations to apply the same separator to every item in a single row (AllItemsInRowSelector
) or column (AllItemsInColumnSelector
).
For example, to show the divider in all the elements except the header you can use the following snippet:
Drawable drawable = getResources().getDrawable(R.drawable.example_drawable);
// Create a layer that applies to all the layers. It's the same as writing :
// Layer allItemsLayer = new Layer(new AllItemsSelector(), DividerBuilder.from(drawable).build());
Layer allItemsLayer = new Layer(DividerBuilder.from(drawable).build());
// Create a layer that applies to all the items in the header with an empty drawable to avoid displaying anything
Layer headerLayer = new Layer(new HeaderSelector(), DividerBuilder.fromEmpty().build());
// Add your layers to the DividerItemDecoration class and provide it to your recycler view!
recyclerView.addItemDecoration(new DividerItemDecoration(LayersBuilder.from(allItemsLayer, headerLayer).build()));
You can also create your own Selector to apply dividers to all items but the ones in the header:
public class NotInHeaderSelector implements Selector {
@Override public boolean isPositionSelected(Position position) {
return !position.isFirstRow();
}
@Override public EnumSet<Direction> getDirectionsByPosition(Position position) {
return EnumSet.allOf(Direction.class);
}
}
As you have seen, selectors also let you apply a divider to some sides of every item depending on things such as the position. In this way you can create selectors to display items as a whole, you can take a look at some examples like RowGroupSelector
:
public class RowGroupSelector extends AllItemsInRowSelector {
protected final int row;
public RowGroupSelector(int row) {
this.row = row;
}
@Override public boolean isPositionSelected(Position position) {
return position.getRow() == row;
}
@Override public EnumSet<Direction> getDirectionsByPosition(Position position) {
// Every component of the row will need to draw, at least, SOUTH_WEST, WEST, NORTH_WEST,
// NORTH_EAST, EAST and SOUTH_EAST directions
EnumSet<Direction> directions = EnumSet.complementOf(
EnumSet.of(Direction.WEST, Direction.EAST));
// If we are the element of the left side we also need to draw the west direction
if (position.isFirstColumn()) {
directions.add(Direction.WEST);
}
// If we are the element of the right side we also need to draw the east direction
if (position.isLastColumn()) {
directions.add(Direction.EAST);
}
return directions;
}
}
Dividers
Dividers are the smallest components that can be rendered and represent all the separators for a single cell. Internally, dividers are represented as a grid of 3x3 elements (ignoring the center). Each side can be referenced with a value from the enum Direction
. This can prove useful when defining complex dividers such as the ones used in headers or footers.
Add it to your project
Add Dividers
dependency to your build.gradle
file
dependencies{
compile 'com.karumi:dividers:1.0.1'
}
or to your pom.xml
if you are using Maven instead of Gradle
<dependency>
<groupId>com.karumi</groupId>
<artifactId>dividers</artifactId>
<version>1.0.1</version>
<type>aar</type>
</dependency>
Do you want to contribute?
Feel free to add any useful feature to the library, we will be glad to improve it :)
Libraries used in this project
External resources used in this project
- IMDB.com ©
License
Copyright 2015 Karumi
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.
*Note that all licence references and agreements mentioned in the Dividers README section above
are relevant to that project's source code only.