ANDROID. ChipsLayoutManager (SpanLayoutManager, FlowLayoutManager). A custom layout manager for RecyclerView which mimicric TextView span behaviour, flow layouts behaviour with support of amazing recyclerView features

Overview

ChipsLayoutManager ChipsLayoutManager is an android library minSdk for ChipsLayoutManager Android Arsenal

ChipsLayoutManager for RecyclerView. Custom layout manager for RecyclerView

This is ChipsLayoutManager - custom Recycler View's LayoutManager which moves item to the next line when no space left on the current

This layout manager could represent Google Chips material design pattern

As an android developer i see that google isn't so polite to support all our wishes, and when i faced with such common task like create spannable list but with support of CRUD animations i decided to make such stuff and share it.

Chips layout manager gif with scrolling

Setup and usage

Installation Download

with gradle

compile 'com.beloo.widget:ChipsLayoutManager:0.3.7@aar'

Assuming you have installed jCenter provider:

allprojects {
    repositories {
        jcenter()
    }
}

or just import ChipsLayoutManager module to your project.

Features

Layout manager represents chips or spanned or "bubble" structure of list items and is a good replace for typical implementations of such issue based on spans in TextView or custom FlowLayouts.

  • supports RecyclerView's/LayoutManager's features, such as default animations while CRUD items & custom ItemAnimators, ItemDecorators, scrolling etc. wrap_content of height is supported
  • vertical scrolling is supported. Horizontal scrolling isn't supported. It is possible to disable vertical scrolling as well. Supported padding/margin, clipToPadding parameter of RecyclerView
  • supports different height and width of items
  • recycling items support (another advantage over TextView approach)
  • items gravity inside row support. For all items or only for required ones
  • LTR and RTL support
  • activity orientation change support
  • predictive animations supported (animate view movement outside of visible bounds)
  • setting max count of view in row
  • you are able to break row due to your conditions
  • justified views in row with spaces or additional view size
Insert/delete Move
Insert/delete animations with ChipsLayoutManager Move animations with ChipsLayoutManager

####Layout Directions

Left to Right Right to Left
Horizontal Left to Right Rows implementation of ChipsLayoutManager Right to Left implementation of ChipsLayoutManager
Vertical Left to Right Columns implementation of ChipsLayoutManager

####Fill strategy Any row has some space left, where is impossible to place the next view, because that space is too small. But we could distribute that space for available views in that row.

Row strategy is a mode of distribution left space.

  • STRATEGY_DEFAULT - is used by default. Left space is placed at the end of the row.
  • STRATEGY_FILL_VIEW - available space is distributed among views.
  • STRATEGY_FILL_SPACE - available space is distributed among spaces between views, start & end views are docked to a nearest border.
  • STRATEGY_CENTER - available space is distributed among spaces between views, start & end spaces included. Views are placed in center of canvas.
  • STRATEGY_CENTER_DENSE - Views are placed in center of canvas. There is no extra space distributed between views.

In such layouts by default last row isn't considered completed. So strategy isn't applied for last row. But you can also enable opposite behaviour.

Usage

ChipsLayoutManager chipsLayoutManager = ChipsLayoutManager.newBuilder()
        //set vertical gravity for all items in a row. Default = Gravity.CENTER_VERTICAL
        .setChildGravity(Gravity.TOP)
        //whether RecyclerView can scroll. TRUE by default
        .setScrollingEnabled(true)
        //set maximum views count in a particular row
        .setMaxViewsInRow(2)
        //set gravity resolver where you can determine gravity for item in position. 
        //This method have priority over previous one
        .setGravityResolver(new IChildGravityResolver() {
            @Override
            public int getItemGravity(int position) {
                return Gravity.CENTER;
            }
        })
        //you are able to break row due to your conditions. Row breaker should return true for that views
        .setRowBreaker(new IRowBreaker() {
            @Override
            public boolean isItemBreakRow(@IntRange(from = 0) int position) {
                return position == 6 || position == 11 || position == 2;
            }
        })
        //a layoutOrientation of layout manager, could be VERTICAL OR HORIZONTAL. HORIZONTAL by default
        .setOrientation(ChipsLayoutManager.HORIZONTAL)
        // row strategy for views in completed row, could be STRATEGY_DEFAULT, STRATEGY_FILL_VIEW, 
        //STRATEGY_FILL_SPACE or STRATEGY_CENTER
        .setRowStrategy(ChipsLayoutManager.STRATEGY_FILL_SPACE)
        // whether strategy is applied to last row. FALSE by default
        .withLastRow(true)
        .build();
rv.setLayoutManager(chipsLayoutManager);

Notice that if you changed gravity resolver or row breaker conditions in runtime - it won't affect already drown items and cached item positions. You have to call notifyItemChanged on ChipsLayoutManager otherwise layout won't be predictable.

Device current direction have been chosen by default. You can manipulate with layout direction (LTR or RTL)
On Api >= 17:

<android.support.v7.widget.RecyclerView
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:layoutDirection="rtl"
       />

or programmatically (on all supported Api:):

ViewCompat.setLayoutDirection(recyclerView, ViewCompat.LAYOUT_DIRECTION_RTL);

For example look at sample application.

Bonus

You may need an RecyclerView.ItemDecoration to work with ChipsLayoutManager for fast setup as showed in sample.
It contained in same package and named SpacingItemDecoration.

Support Maintained

BETA is going. I respond to your founded issues. Just create a ticket if you found something goes wrong.
Thanks for testing, guys. I'm really appreciate it.

Contributors

All pull requests are welcome. I've tried to make code clean & readable, so the next is up to you. I appreciate any help and contributors will be mentioned here.

Thanks, szijpeter and everyone for valuable updates.

Known issues

I create issues in tracking board of known problems. These issues are going to be fixed in next versions.

License license for ChipsLayoutManager

Copyright 2016 Beloy Oleg, Ukraine.

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.
Comments
  • Nested scrolling problem

    Nested scrolling problem

    Seems like it's the LayoutManagers responsibility to handle nested scrolling somehow, because placing a LinearLayoutManager inside a BottomSheetDialogFragment works like a charm but if I use ChipsLayoutManager and try to scroll down the list the BottomSheet is closed...

    It needs to consume the scroll events somehow it seems...

    bug Ready 
    opened by MFlisar 8
  • RecyclerView height wrap_content

    RecyclerView height wrap_content

    So my problem is what when I use android:layout_height="wrap_content" for my RecyclerView, he just cut off instead of expanding. Or I doing something wrong or it is just a bug.

    opened by whitipet 7
  • java.lang.IllegalStateException

    java.lang.IllegalStateException

    java.lang.IllegalStateException: Observer com.beloo.widget.chipslayoutmanager.layouter.MeasureSupporter@6c0f5aa is already registered.

    When I call setAdapter the second time for my RecyclerView which has ChipsLayoutManager, it will give me this error.

    bug 
    opened by hubcin 5
  • Support Gravity.FILL

    Support Gravity.FILL

    It would be nice if we could fill the whole width of the line. It would also be nice if we could do it two ways

    1. Add more spacing
    2. Increase the width of the items.
    feature request Ready 
    opened by mvarnagiris 5
  • Few problems

    Few problems

    • gradle import is not working - even after adding maven { url "http://dl.bintray.com/beloo/widget" }
    • if I download your project and use it in my app, the id "me.tatarka.retrolambda" version "3.3.1" is interfering with the definition in my project. I think this plugin should be defined in the root project, not in the library project
    • I'm using timber myself, so this is no problem for me, but I suggest removing timber from the library. It's an unnecessary extra dependency...
    enhancement waiting for release 
    opened by MFlisar 5
  • Crash with ClassCastException

    Crash with ClassCastException

    To reproduce:

    1. In device developer options turn on Don't keep activities.
    2. Open activity with ChipsLayoutManager.
    3. Press device home button.
    4. Open activity with ChipsLayoutManager again.

    This happens when you leave the app in the background for a while and activity is killed by the system.

    If you cannot reproduce like that, let me know, I'll provide more detailed setup.

    Fatal Exception: java.lang.RuntimeException: Unable to start activity ComponentInfo{com.emoticast.tunemoji.android.debug/com.emoticast.tunemoji.feature.main.MainActivity}: java.lang.ClassCastException: android.support.v7.widget.LinearLayoutManager$SavedState cannot be cast to com.beloo.widget.chipslayoutmanager.ParcelableContainer
           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2665)
           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
           at android.app.ActivityThread.-wrap12(ActivityThread.java)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
           at android.os.Handler.dispatchMessage(Handler.java:102)
           at android.os.Looper.loop(Looper.java:154)
           at android.app.ActivityThread.main(ActivityThread.java:6119)
           at java.lang.reflect.Method.invoke(Method.java)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
    Caused by java.lang.ClassCastException: android.support.v7.widget.LinearLayoutManager$SavedState cannot be cast to com.beloo.widget.chipslayoutmanager.ParcelableContainer
           at com.beloo.widget.chipslayoutmanager.ChipsLayoutManager.onRestoreInstanceState(ChipsLayoutManager.java:413)
           at android.support.v7.widget.RecyclerView.onRestoreInstanceState(RecyclerView.java:1188)
           at android.view.View.dispatchRestoreInstanceState(View.java:15751)
           at android.view.ViewGroup.dispatchThawSelfOnly(ViewGroup.java:3251)
           at android.support.v7.widget.RecyclerView.dispatchRestoreInstanceState(RecyclerView.java:1205)
           at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3237)
           at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3237)
           at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3237)
           at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3237)
           at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3237)
           at android.view.ViewGroup.dispatchRestoreInstanceState(ViewGroup.java:3237)
           at android.view.View.restoreHierarchyState(View.java:15729)
           at com.android.internal.policy.PhoneWindow.restoreHierarchyState(PhoneWindow.java:2106)
           at android.app.Activity.onRestoreInstanceState(Activity.java:1047)
           at android.app.Activity.performRestoreInstanceState(Activity.java:1002)
           at android.app.Instrumentation.callActivityOnRestoreInstanceState(Instrumentation.java:1174)
           at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2638)
           at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2726)
           at android.app.ActivityThread.-wrap12(ActivityThread.java)
           at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1477)
           at android.os.Handler.dispatchMessage(Handler.java:102)
           at android.os.Looper.loop(Looper.java:154)
           at android.app.ActivityThread.main(ActivityThread.java:6119)
           at java.lang.reflect.Method.invoke(Method.java)
           at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
           at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
    
    bug Ready 
    opened by mvarnagiris 3
  • TopGravityModifier checks improper values

    TopGravityModifier checks improper values

    Hi I have a app I've been playing with and had this library on 0.2.3, I just attempted to update to the latest 0.3.7, and receive a crash.

    I experience this when I set:

    setGravityResolver(new IChildGravityResolver() {
                        @Override
                        public int getItemGravity(int position) { 
                            return Gravity.TOP;
                        }
                    })
    

    Using other Gravitys work fine (BOTTOM, CENTER)

    From looking in the source i see that the TopGravityModifier class was modified to check the left/right edges of the rect against the minStart and minEnd, whereas the BOTTOM layout checks the top and bottom, and I do not experience the issue using BOTTOM.

    class TopGravityModifier implements IGravityModifier {
        TopGravityModifier() {
        }
    
        public Rect modifyChildRect(int minStart, int maxEnd, Rect childRect) {
            if(childRect.**left** < minStart) {
                throw new IllegalArgumentException("top point of input rect can\'t be lower than minTop");
            } else if(childRect.**right** > maxEnd) {
                throw new IllegalArgumentException("bottom point of input rect can\'t be bigger than maxTop");
            } else {
                childRect = new Rect(childRect);
                if(childRect.top > minStart) {
                    childRect.bottom -= childRect.top - minStart;
                    childRect.top = minStart;
                }
    
                return childRect;
            }
        }
    }
    
    class BottomGravityModifier implements IGravityModifier {
        BottomGravityModifier() {
        }
    
        public Rect modifyChildRect(int minStart, int maxEnd, Rect childRect) {
            if(childRect.**top** < minStart) {
                throw new IllegalArgumentException("top point of input rect can\'t be lower than minTop");
            } else if(childRect.**bottom** > maxEnd) {
                throw new IllegalArgumentException("bottom point of input rect can\'t be bigger than maxTop");
            } else {
                Rect modified = new Rect(childRect);
                if(modified.bottom < maxEnd) {
                    modified.top += maxEnd - modified.bottom;
                    modified.bottom = maxEnd;
                }
    
                return modified;
            }
        }
    }
    

    I'm not certain that this is a mistake, but it looks fishy. Eitherway something changed and I can't seem to figure out how to use Gravity.TOP again.

    The crash I see when using Gravity.TOP is as follows:

    FATAL EXCEPTION: main Process: com.foo, PID: 22659 java.lang.IllegalArgumentException: bottom point of input rect can't be bigger than maxTop at com.beloo.widget.chipslayoutmanager.gravity.TopGravityModifier.modifyChildRect(TopGravityModifier.java:13) at com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter.applyChildGravity(AbstractLayouter.java:277) at com.beloo.widget.chipslayoutmanager.layouter.AbstractLayouter.layoutRow(AbstractLayouter.java:250) at com.beloo.widget.chipslayoutmanager.ChipsLayoutManager.fillWithLayouter(ChipsLayoutManager.java:893) at com.beloo.widget.chipslayoutmanager.ChipsLayoutManager.fill(ChipsLayoutManager.java:821) at com.beloo.widget.chipslayoutmanager.ChipsLayoutManager.onLayoutChildren(ChipsLayoutManager.java:719) at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3535) at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3264) at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3796) at android.view.View.layout(View.java:16694) at android.view.ViewGroup.layout(ViewGroup.java:5481) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) at android.widget.FrameLayout.onLayout(FrameLayout.java:273) at android.view.View.layout(View.java:16694) at android.view.ViewGroup.layout(ViewGroup.java:5481) at android.support.v4.view.ViewPager.onLayout(ViewPager.java:1795) at android.view.View.layout(View.java:16694) at android.view.ViewGroup.layout(ViewGroup.java:5481) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1743) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1586) at android.widget.LinearLayout.onLayout(LinearLayout.java:1495) at android.view.View.layout(View.java:16694) at android.view.ViewGroup.layout(ViewGroup.java:5481) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) at android.widget.FrameLayout.onLayout(FrameLayout.java:273) at android.view.View.layout(View.java:16694) at android.view.ViewGroup.layout(ViewGroup.java:5481) at com.android.internal.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:493) at android.view.View.layout(View.java:16694) at android.view.ViewGroup.layout(ViewGroup.java:5481) at android.widget.FrameLayout.layoutChildren(FrameLayout.java:336) at android.widget.FrameLayout.onLayout(FrameLayout.java:273) at com.android.internal.policy.PhoneWindow$DecorView.onLayout(PhoneWindow.java:2697) at android.view.View.layout(View.java:16694) at android.view.ViewGroup.layout(ViewGroup.java:5481) at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2228) at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:1981) at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1140) at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6232) at android.view.Choreographer$CallbackRecord.run(Choreographer.java:858) at android.view.Choreographer.doCallbacks(Choreographer.java:670) at android.view.Choreographer.doFrame(Choreographer.java:606) at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:844) at android.os.Handler.handleCallback(Handler.java:739) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:148) at android.app.ActivityThread.main(ActivityThread.java:5551) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:730) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:620)

    bug 
    opened by abuttlemur 2
  • Automatic increment in margin space

    Automatic increment in margin space

    When a new item is added, or an existing item is deleted, margin space is increasing automatically in all rows and columns. It should be happening only in the vicinity of an interacted item.

    This is the setting I am using:

    ChipsLayoutManager chipsLayoutManager = ChipsLayoutManager.newBuilder(this) .setChildGravity(Gravity.CENTER_VERTICAL) .setMaxViewsInRow(5) .setScrollingEnabled(true) .setOrientation(ChipsLayoutManager.HORIZONTAL) .setRowStrategy(ChipsLayoutManager.STRATEGY_DEFAULT) .withLastRow(true).build();

    rvSubject.setLayoutManager(chipsLayoutManager); rvSubject.addItemDecoration(new SpacingItemDecoration(5, 5));

    opened by ramseth001 1
  • Exception with ItemTouchHelper for drag item

    Exception with ItemTouchHelper for drag item

    image

          int i;
          int position;
          for(i = 0; i < disappearingViews.getForwardViews().size(); ++i) {
            position = disappearingViews.getForwardViews().keyAt(i);
            downLayouter.placeView(recycler.getViewForPosition(position));
          }
    

    the position will return 133 that cause a IndexOutOfBoundsException in RecyclerView

    opened by t894924815 1
  • Could not find 'ChipsLayoutManager'

    Could not find 'ChipsLayoutManager'

    I correctly setup library but I could not find 'ChipsLayoutManager', when wanted to use it.....

    allprojects {
        repositories {
            jcenter()
        }
    }
    

    compile 'com.beloo.widget:ChipsLayoutManager:0.3.7@aar'

    opened by H-Zan 1
  • Fix issue where scrolling gets stuck on second to last row/column

    Fix issue where scrolling gets stuck on second to last row/column

    Fixes #40 Views are added to the layout manager before they are inside the canvas, which would cause the last child views in the layout manager to be ignored in the canvas findBorderViews() method. This caused a case where stateFactory.getEndViewBound() was returning the end position of the previous row/column instead of the end of the row/column containing the last child. This was preventing scrolling past the second to last row because the scrolling controller thought the last view's end had reached the parent end.

    opened by jasennett 1
  • Need to publish to different maven repository

    Need to publish to different maven repository

    JFrog have announced that JCenter will be shut down on May 1st 2021 (and will not accept new artifacts from Feb 28th 2021), so need to change the public maven repository this library is published to. Maven central is the recommended replacement, but it could be any public repository.

    opened by chrisharris77 7
  • Long text issue

    Long text issue

    When there is long text in a chip it should first try to fit width then grow but what's happening is it is going two lines not first trying to fit in the row Screenshot_20190816-161524__01

    opened by shahviral9990 0
  • How to set max height when

    How to set max height when "wrap_content"

    We need a max height in RecyclerView, when set layout_height "wrap_content", but how to set max height? Maybe need a property or a method to set.

    opened by KiritoBeater 1
Releases(v0.3.7)
  • v0.3.7(Jan 12, 2017)

  • v.0.3.6(Dec 30, 2016)

  • v0.3.5(Dec 23, 2016)

    A stability release over v0.3.4.

    Several of already fixed issues covered with functional/unit tests. Since this release issues will be covered with tests to prevent regression.

    Source code(tar.gz)
    Source code(zip)
  • v.0.3.4.1(Dec 19, 2016)

    Resolved issue : https://github.com/BelooS/ChipsLayoutManager/issues/12 Refactored main manager class code. It have been a bit bigger than 1k lines again. More docs & comments

    A layout manager have become closer to the non-beta version

    Source code(tar.gz)
    Source code(zip)
  • v0.3.3(Dec 5, 2016)

    Stability release.

    Provided bug fixes for some mentioned issues: https://github.com/BelooS/ChipsLayoutManager/issues/16 https://github.com/BelooS/ChipsLayoutManager/issues/8 https://github.com/BelooS/ChipsLayoutManager/issues/18 https://github.com/BelooS/ChipsLayoutManager/issues/17

    Updated sample with bottom sheet fragment to show example with ChipsLayoutManager inside scrollable container

    and others like broken scrollToPosition method in a previous release

    Source code(tar.gz)
    Source code(zip)
  • v0.3.1(Dec 1, 2016)

    Added fill strategies:

    Any row has some space left, where is impossible to place the next view, because that space is too small. But we could distribute that space for available views in the row.

    Row strategy is a mode of distribution left space.

    STRATEGY_DEFAULT - is used by default. Left space is placed at the end of the row. STRATEGY_FILL_VIEW - available space is distributed among views. STRATEGY_FILL_SPACE - available space is distributed among spaces between views, start & end views are docked to a nearest border. STRATEGY_CENTER - available space is distributed among spaces between views, start & end spaces included. Views are placed in center of canvas.

    In such layouts by default last row isn't considered completed. So strategy isn't applied for last row. But you can also enable opposite behaviour.

    Provided support for

     int findFirstVisibleItemPosition();
     int findFirstCompletelyVisibleItemPosition();
     int findLastVisibleItemPosition();
     int findLastCompletelyVisibleItemPosition();
    

    Of course, any release notes have to contain such line:

    • bug fixes
    Source code(tar.gz)
    Source code(zip)
  • v0.3.0(Nov 23, 2016)

    • I've implemented vertical layout with LTR orientation of items. It supports all stuff as a horizontal one
    • bug fixes with auto-measuring
    • code-refactoring
    Source code(tar.gz)
    Source code(zip)
  • v0.2.4(Nov 16, 2016)

    • positions cache restored on orientation change
    • wrap_content fix ( height of view didn't decreased in case deletion with previous version)
    • dependencies cleanup
    • minor bug fixes
    Source code(tar.gz)
    Source code(zip)
  • v0.2.2(Nov 10, 2016)

    Unfortunately 0.2.1 have contained several bugs, also i forgot to implement breaker feature for RTL layout, so this release have created to fix that.

    • implemented breaker feature. You can break row due to your conditions.
    • scrolling bug fix
    • other bug fixes
    Source code(tar.gz)
    Source code(zip)
  • v0.1.2(Oct 31, 2016)

    Shared with Android Arsenal & Material Up.

    Horizontal Š”hipsLayoutManager is working without some predictive animations. This stable beta is ready for using in general, but could have problems in some particular cases.

    Source code(tar.gz)
    Source code(zip)
  • v0.2.0(Nov 9, 2016)

    • Added support for insert/delete/move predictive animations (movement to out of visible screen bounds)
    • Fixed : deleting the tallest item in the zero row broke top padding.
    • minor bug-fixes
    Source code(tar.gz)
    Source code(zip)
Owner
Oleg Beloy
Oleg Beloy
Custom Layout Manager for Recycler View

Circular Layout Manager Overview A library for Android which essentially contains a Custom Layout Manager for Recycler View which lays out its child v

Kapilesh Iyer 181 Dec 2, 2022
A layout manager for the RecyclerView with interchangeable linear, grid, and staggered displays of views, all with configurable section headers including the sticky variety as specified in the material design docs.

SuperSLiM This is the version 5 development branch. Project Plan Support me on Patreon Blog What is Version 5 Version 5 is the current development bra

Tonic Artos 2.1k Jan 2, 2023
Handy library to integrate pagination, which allow no data layout, refresh layout, recycler view in one view and easy way to bind pagination in app.

Pagination View Handy library to integrate pagination, which allow no data layout, refresh layout, recycler view in one view and easy way to bind pagi

DhiWise 4 Dec 18, 2021
how to handle recyclerView in Kotlin to display grid , vertical , horizontal layouts

Dogglers - Starter Code Starter code for the second independent project for Android Basics in Kotlin. Introduction This is the starter code for the Do

null 0 Mar 28, 2022
RecyclerView extension library which provides advanced features. (ex. Google's Inbox app like swiping, Play Music app like drag and drop sorting)

Advanced RecyclerView This RecyclerView extension library provides Google's Inbox app like swiping, Play Music app like drag-and-drop sorting and expa

Haruki Hasegawa 5.2k Dec 23, 2022
A RecyclerView(advanced and flexible version of ListView in Android) with refreshing,loading more,animation and many other features.

UltimateRecyclerView Master branch: Dev branch: Project website:https://github.com/cymcsg/UltimateRecyclerView Description UltimateRecyclerView is a R

MarshalChen 7.2k Jan 2, 2023
A RecyclerView solution, support addHeaderView态addFooterView

HeaderAndFooterRecyclerView Introduction HeaderAndFooterRecyclerView is a RecyclerView solution that supports addHeaderView, addFooterView to a Recycl

cundong 1.4k Dec 24, 2022
Simple plug and play custom RecyclerView

InfiniteScrollRecyclerView Pros: Simple plug and play custom RecyclerView. Easy to use Built on top of RecyclerView, hence it is performant as it work

Frontier 61 Dec 28, 2022
ItemDecorator - Custom item decorator for adding divider for only the first item of a RecyclerView

ItemDecorator Custom item decorator for adding divider for only the first item o

null 1 Apr 1, 2022
TikTok-RecyclerView - This is a demo app built using 'Koin' a new dependency injection framework for Android along with RecyclerView and ExoPlayer2.

TikTok-RecyclerView Demo About This is a demo app built using 'Koin' a new dependency injection framework for Android along with RecyclerView and ExoP

Baljeet Singh 19 Dec 28, 2022
A RecyclerView that implements pullrefresh and loadingmore featrues.you can use it like a standard RecyclerView

XRecyclerView a RecyclerView that implements pullrefresh , loadingmore and header featrues.you can use it like a standard RecyclerView. you don't need

XRecyclerView 5.3k Dec 26, 2022
A RecyclerView that implements pullrefresh and loadingmore featrues.you can use it like a standard RecyclerView

XRecyclerView a RecyclerView that implements pullrefresh , loadingmore and header featrues.you can use it like a standard RecyclerView. you don't need

XRecyclerView 5.3k Dec 26, 2022
RecyclerView : SleepQualityTracker with RecyclerView app

RecyclerView - SleepQualityTracker with RecyclerView app SleepQualityTracker with RecyclerView This app builds on the SleepQualityTracker developed pr

Kevin 2 May 14, 2022
Pagination-RecyclerView - Simple and easy way to Paginating a RecyclerView

Pagination-RecyclerView Simple and easy way to Paginating a RecyclerView Android

Rakshit Nawani 0 Jan 3, 2022
An Android Animation library which easily add itemanimator to RecyclerView items.

RecyclerView Animators RecyclerView Animators is an Android library that allows developers to easily create RecyclerView with animations. Please feel

Daichi Furiya 11.2k Jan 8, 2023
A Common RecyclerView.Adapter implementation which supports all kind of items and has useful data operating APIs such as remove,add,etc.

##PowerfulRecyclerViewAdapter A Common RecyclerView.Adapter implementation which supports any kind of items and has useful data operating APIs such as

null 313 Nov 12, 2022
A RecyclerView Adapter which allows you to have an Infinite scrolling list in your apps

Infinite Recycler View A RecyclerView Adapter which allows you to have an Infinite scrolling list in your apps. This library offers you a custom adapt

IB Sikiru 26 Dec 10, 2019
A custom recycler view with shimmer views to indicate that views are loading.

ShimmerRecyclerView Intro A custom recycler view with shimmer views to indicate that views are loading. The recycler view has a built-in adapter to co

Harish Sridharan 3.8k Dec 31, 2022