An Android library that brings the Material Design 5.1 sidebar to pre-5.1 devices.

Overview

MaterialScrollBar

Apache 2.0 Version Android Arsenal

An Android library that brings the Material Design 5.1 scrollbar to pre-5.1 devices. Designed for Android's recyclerView.

Video

Image Preview

Google Play - Test Out the App

Donate

Table of Contents

  1. Gradle
  2. Documentation
    1. How to use
    2. My recyclerView elements aren't all the same size! What do I do?
    3. Indicators
    4. Specific Indicators
  3. License

Gradle

allprojects {
    repositories {
        maven { url 'https://jitpack.io' }
    }
}
dependencies {
    implementation 'com.github.turing-tech:MaterialScrollBar:13.+'
}

Documentation

Note: All customisation methods (setAutoHide, setBarColor, etc) return the materialScrollBar, so they can be chained together if wanted. Alternatively, you can just operate on a variable.

How to use

The library comes in two flavours, drag and touch. Try both out to see which you prefer.

Option 1 - Drag

<com.turingtechnologies.materialscrollbar.DragScrollBar
    android:id="@+id/dragScrollBar"
    android:layout_width="wrap_content"
    app:msb_recyclerView="@id/recyclerView"
    app:msb_lightOnTouch="[[boolean]]"
    android:layout_height="match_parent" />

or

Option 2 - Touch

<com.turingtechnologies.materialscrollbar.TouchScrollBar
    android:id="@+id/touchScrollBar"
    android:layout_width="wrap_content"
    app:msb_recyclerView="@id/recyclerView"
    app:msb_lightOnTouch="[[boolean]]"
    android:layout_height="match_parent" />

Additonal optional attributes:

  • msb_handleColor - Color
  • msb_barColor - Color
  • msb_handleOffColor - Color
  • msb_textColor - Color
  • msb_barThickness - Integer
  • msb_rightToLeft - Boolean

Please note that for both of these configurations, both recyclerView and lightOnTouch* must have a valid value. The recyclerView attribute should point to the id of the recyclerView to which you want to link the scrollbar.

* lightOnTouch behaves like this: A value of true will cause the handle to be grey until pressed, when it will become the normal accent color (as set). A value of false will cause the handle to always have the accent color, even when not being pressed.


My recyclerView elements aren't all the same size! What do I do?

If you are in the situation of using headers of one size and elements of another, we've developed a solution speicifcally for you. Please follow the tutorial here.

If you are in some other situation where you're elements are differently sized, implement ICustomScroller in your adapter and complete the included methods.


Indicators

To add an indicator, simply add the following line of code:

scrollBar.setIndicator({{Indicator}}, {{addSpace}});

The indicator should be either AlphatbetIndicator, DateAndTimeIndicator, or CustomIndicator. See below for specific instructions per indicator.

{{addSpace}} is a boolean which indicates whether there should be space in between the indicator and the bar. True adds space, as in the latest version of the Google Launcher, while false adds no space, as in the Android 5.1 system scrollbars.

To use an indicator, you MUST make your recyclerView's adapter implement the relevant interface. If you do not, the library will throw a runtime error informing you of your mistake. See documentation for the relevant interface.


Specific Indicators

AlphabetIndicator

Required Interface: INameableAdapter

To implement an AlphabetIndicator, which displays one character usually corresponding to the first letter of each item, add the following to the end of your scroll bar instantiation, or add it as a seperate line.

...setIndicator(new AlphabetIndicator(this));

DateAndTimeIndicator

Required Interface: IDateableAdapter

To implement a DateAndTimeIndicator, which displays any combination of time, day of the month, month, and year, add the following to the end of your scroll bar instantiation, or add it as a seperate line.

...setIndicator(new DateAndTimeIndicator(this, {{includeYear}}, {{includeMonth}}, {{includeDay}}, {{includeTime}}));

All of the arguments are booleans (except for this first one obviously). The indicator will dynamically size, add punctuation, and localise for you. All you need to do is provide a Date object for each element in your adapter. You should almost always use miliseconds since the epoch unless you have a good reason not to. Otherwise, the library might crash.

CustomIndicator

Required Interface: ICustomAdapter

To implement a CustomIndicator, which displays any text you want, add the following to the end of your scroll bar instantiation, or add it as a seperate line.

...setIndicator(new CustomIndicator(this));

License

Material Scroll Bar:

Copyright 2016-2017 Turing Technologies, an unincorporated orginisation of Wynne Plaga.

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.

This licensing is applicable to all code offered as part of this
repository, which can be identified by the lisence notice preceding
the content AND/OR by its inclusion in a package starting with "com.
turingtechnologies.materialscrollbar".

RecyclerView-FastScroll:

 Copyright (C) 2016 Tim Malseed

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.

Launcher 3:

 Copyright (C) 2010 The Android Open Source Project

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
  • Scrollbar doesn't move between positions when using custom scroll

    Scrollbar doesn't move between positions when using custom scroll

    So I have different row heights in my recyclerview so I implemented ICustomScroller in my adapter for scrolling to work - which it does.

    However it is not very smooth because the scroll bar doesn't move between two positions if that makes sense. As in: if I have position 1 at the very top of the screen and position 2 in the middle of the screen, dragging the scrollbar from top to middle doesn't show the scrollbar being dragged, however when I reach the middle of the screen the scrollbar suddenly jumps from the top of the screen to the middle. Am I missing something?

    opened by MinaHany 26
  • GridLayoutManager + Headers => jumping when scrolling fast scroller

    GridLayoutManager + Headers => jumping when scrolling fast scroller

    I wrap my items in a Wrapper class which ads header items to the underlying data. Headers will have a span size equal to the columns in the GridLayoutManager and headers have one. Setup looks like following:

    ((GridLayoutManager) rvContent2.getLayoutManager()).setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
                @Override
                public int getSpanSize(int position) {
                    if (rvContent2 == null) // may happen while activity is destroyed!
                        return 1;
                    return adapter.isHeader(position) ? ((GridLayoutManager) rvContent2.getLayoutManager()).getSpanCount() : 1;
                }
            });
    

    Seems like scrolling logic does not work with such a setup due to different item sizes and spans?

    enhancement willfix 
    opened by MFlisar 25
  • ViewRootImpl CalledFromWrongThreadException

    ViewRootImpl CalledFromWrongThreadException

    Hi,

    I randomly got a force close in my application. image In my fragment: recyclerView.setAdapter(adapter); TouchScrollBar touchScrollBar = (TouchScrollBar) view.findViewById(R.id.touch_scroll_bar); touchScrollBar.addIndicator(new CustomIndicator(getContext()), true); (without xml is identically)

    An idea ?

    bug 
    opened by JorisBodin 19
  • Using this library with RecyclerView having layout as StaggeredGridLayout

    Using this library with RecyclerView having layout as StaggeredGridLayout

    Developer , I really liked your MaterialScrollBar library. Only issue I have is using this in StaggeredGridLayout. I am developing a gallery application and in that I use RecyclerView layout manager StaggeredGridLayout.

    I Forked your library and tried changing ScrollingUtilities.java file, and was able to use the scrollbar but Scrollbar height and scroll computation is not correctly in sync.

    Please help me as to how can I incorporate this library with my project.

    Thanks

    opened by ankesh4040 17
  • Trying to make it like in Google Now Launcher

    Trying to make it like in Google Now Launcher

    The latest version of Google Now Launcher has new kind of Scroller, it isn't completely different just a bit smart. Can you try to make MaterialScrollBar like that way?

    opened by AkshayChordiya 16
  • How to display scroll bar on the left for right-to-left layouts?

    How to display scroll bar on the left for right-to-left layouts?

    Is there a way to display the scrollbar on the left hand side of the screen for right-to-left languages? Doesn't look like this is exposed through a public method so is it easy to override this in some other way?

    opened by MinaHany 14
  • Intermittent Crash (Null Pointer)

    Intermittent Crash (Null Pointer)

    Unfortunately cannot pin down the steps to recreate but very occasionally I get a null pointer exception. Any ideas?

    Crash: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.view.View.getTop()' on a null object reference at android.support.v7.widget.RecyclerView$LayoutManager.getDecoratedTop(RecyclerView.java:7675) at com.turingtechnologies.materialscrollbar.ScrollingUtilities.getCurScrollState(ScrollingUtilities.java:152) at com.turingtechnologies.materialscrollbar.ScrollingUtilities.scrollToPositionAtProgress(ScrollingUtilities.java:107) at com.turingtechnologies.materialscrollbar.MaterialScrollBar.onDown(MaterialScrollBar.java:634) at com.turingtechnologies.materialscrollbar.DragScrollBar$1.onTouch(DragScrollBar.java:74) at android.view.View.dispatchTouchEvent(View.java:9296) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2547) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2240) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:2553) at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2254) at com.android.internal.policy.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:2403) at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1737) at android.app.Activity.dispatchTouchEvent(Activity.java:2771) at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60) at android.support.v7.view.WindowCallbackWrapper.dispatchTouchEvent(WindowCallbackWrapper.java:60) at com.android.internal.policy.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:2364) at android.view.View.dispatchPointerEvent(View.java:9520) at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:4230) at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4096) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3787) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3669) at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3844) at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3642) at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3695) at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3661) at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:36

    bug 
    opened by alistairsykes 12
  • Scrollbar isn't showing

    Scrollbar isn't showing

    No matter what I do, I simply can't get the MaterialScrollBar to show.

    I've tried using the XML way of inserting the scrollbar and the programmatic way.

    Here is my XML

    <FrameLayout 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:background="?attr/activity_background">
    
        <me.ccrama.redditslide.Views.GeneralSwipeRefreshLayout
            android:id="@+id/activity_main_swipe_refresh_layout"
            android:layout_width="match_parent"
            android:layout_height="match_parent">
    
            <RelativeLayout
                android:layout_width="match_parent"
                android:layout_height="match_parent">
    
                <android.support.v7.widget.RecyclerView
                    android:id="@+id/vertical_content"
                    android:layout_width="match_parent"
                    android:layout_height="match_parent"
                    android:orientation="vertical"
                    android:scrollbars="vertical" />
    
                <com.turingtechnologies.materialscrollbar.TouchScrollBar
                    android:id="@+id/dragScrollBar"
                    app:recyclerView="@id/vertical_content"
                    android:layout_width="wrap_content"
                    android:layout_height="match_parent"
                    app:lightOnTouch="true"
                    app:barThickness="4"
                    android:layout_alignParentTop="true"
                    android:layout_alignParentEnd="true" />
            </RelativeLayout>
    
        </me.ccrama.redditslide.Views.GeneralSwipeRefreshLayout>
    </FrameLayout>
    

    And here is how I would create it in the class:

        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            LayoutInflater localInflater = inflater.cloneInContext(contextThemeWrapper);
            v = localInflater.inflate(R.layout.fragment_verticalcontenttoolbar, container, false);
    
            rv = ((RecyclerView) v.findViewById(R.id.vertical_content));
            TouchScrollBar msb = new TouchScrollBar(getActivity(), rv, true);
    
            rv.setLayoutManager(mLayoutManager);
            rv.getLayoutManager().scrollToPosition(0);
            doAdapter(); //sets the adapter on rv
            return v;
        }
    

    No matter what--nothing shows. What am I doing wrong?

    opened by Nxt3 10
  • Support for CoordinatorLayout added

    Support for CoordinatorLayout added

    Sadly the MaterialScrollBar sets up the LayoutParams of it's sub views before the it's layed out, this means, I can't check if the MaterialScrollBar is placed in a CoordinatorLayout. Therefore I had to add a xml attribute msb_placedInCoordinator. Based on this, the MaterialScrollBar can create RelativeLayout params or CoordinatorLayout params...

    opened by MFlisar 9
  • RecyclerView with different size rows

    RecyclerView with different size rows

    Hello,

    I've got a RecyclerView with multiple ViewHolders that all have a separate layout file with a different height (for example 20dp, 40dp and 60dp). So each row has a different (but static) height. When i use the TouchScrollBar it doesn't scroll smoothly trough the items. Is there a way to support this?

    opened by Marcelhozeman 9
  • Using same RecyclerViewAdapter twice at different fragments MaterialScrollBar wont work on second adapter

    Using same RecyclerViewAdapter twice at different fragments MaterialScrollBar wont work on second adapter

    Hello, we are using this library on our app. And we have got a little problem.

    We have got a MainActivity which it has 3 fragments on ViewPager.

    We have got a MediaListAdapter which is RecyclerViewAdapter. We are using this adapter on 2 fragment at the same time. So first fragment works great but second fragment's scrollbar not showen or not working. If you pull from right to left on screen you can see scrollbar on second fragment. But that scrollbar work for first fragment.

    opened by duruer 8
  • Problems import dependencies with maven

    Problems import dependencies with maven

    Work perfectly implementation 'com.github.turing-tech:MaterialScrollBar:13.+'

    Don't work implementation 'com.github.turing-tech:MaterialScrollBar:13.4.1'

    opened by webserveis 0
  • Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'char java.lang.Character.charValue()' on a null object reference

    Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'char java.lang.Character.charValue()' on a null object reference

    Getting error at AlphabetIndicator.java line 35 com.turingtechnologies.materialscrollbar.AlphabetIndicator.getTextElement

    Fatal Exception: java.lang.NullPointerException: Attempt to invoke virtual method 'char java.lang.Character.charValue()' on a null object reference at com.turingtechnologies.materialscrollbar.AlphabetIndicator.getTextElement + 35(AlphabetIndicator.java:35) at com.turingtechnologies.materialscrollbar.AlphabetIndicator.getTextElement + 25(AlphabetIndicator.java:25) at com.turingtechnologies.materialscrollbar.Indicator.setText + 141(Indicator.java:141) at com.turingtechnologies.materialscrollbar.ScrollingUtilities.scrollHandleAndIndicator + 73(ScrollingUtilities.java:73) at com.turingtechnologies.materialscrollbar.MaterialScrollBar.onLayout + 309(MaterialScrollBar.java:309) at android.view.View.layout + 19693(View.java:19693) at android.view.ViewGroup.layout + 6079(ViewGroup.java:6079) at android.widget.RelativeLayout.onLayout + 1083(RelativeLayout.java:1083) at android.view.View.layout + 19693(View.java:19693) at android.view.ViewGroup.layout + 6079(ViewGroup.java:6079) at android.widget.RelativeLayout.onLayout + 1083(RelativeLayout.java:1083) at android.view.View.layout + 19693(View.java:19693) at android.view.ViewGroup.layout + 6079(ViewGroup.java:6079) at androidx.viewpager.widget.ViewPager.onLayout + 1775(ViewPager.java:1775) at android.view.View.layout + 19693(View.java:19693) at android.view.ViewGroup.layout + 6079(ViewGroup.java:6079) at android.widget.RelativeLayout.onLayout + 1083(RelativeLayout.java:1083) at android.view.View.layout + 19693(View.java:19693) at android.view.ViewGroup.layout + 6079(ViewGroup.java:6079) at android.widget.FrameLayout.layoutChildren + 323(FrameLayout.java:323) at android.widget.FrameLayout.onLayout + 261(FrameLayout.java:261) at android.view.View.layout + 19693(View.java:19693) at android.view.ViewGroup.layout + 6079(ViewGroup.java:6079) at android.widget.FrameLayout.layoutChildren + 323(FrameLayout.java:323) at android.widget.FrameLayout.onLayout + 261(FrameLayout.java:261) at android.view.View.layout + 19693(View.java:19693) at android.view.ViewGroup.layout + 6079(ViewGroup.java:6079) at android.widget.FrameLayout.layoutChildren + 323(FrameLayout.java:323) at android.widget.FrameLayout.onLayout + 261(FrameLayout.java:261) at android.view.View.layout + 19693(View.java:19693) at android.view.ViewGroup.layout + 6079(ViewGroup.java:6079) at android.widget.LinearLayout.setChildFrame + 1791(LinearLayout.java:1791) at android.widget.LinearLayout.layoutVertical + 1635(LinearLayout.java:1635) at android.widget.LinearLayout.onLayout + 1544(LinearLayout.java:1544) at android.view.View.layout + 19693(View.java:19693) at android.view.ViewGroup.layout + 6079(ViewGroup.java:6079) at com.jude.swipbackhelper.SwipeBackLayout.onLayout + 275(SwipeBackLayout.java:275) at android.view.View.layout + 19693(View.java:19693) at android.view.ViewGroup.layout + 6079(ViewGroup.java:6079) at android.widget.FrameLayout.layoutChildren + 323(FrameLayout.java:323) at android.widget.FrameLayout.onLayout + 261(FrameLayout.java:261) at com.android.internal.policy.DecorView.onLayout + 764(DecorView.java:764) at android.view.View.layout + 19693(View.java:19693) at android.view.ViewGroup.layout + 6079(ViewGroup.java:6079) at android.view.ViewRootImpl.performLayout + 2541(ViewRootImpl.java:2541) at android.view.ViewRootImpl.performTraversals + 2257(ViewRootImpl.java:2257) at android.view.ViewRootImpl.doTraversal + 1437(ViewRootImpl.java:1437) at android.view.ViewRootImpl$TraversalRunnable.run + 6886(ViewRootImpl.java:6886) at android.view.Choreographer$CallbackRecord.run + 1029(Choreographer.java:1029) at android.view.Choreographer.doCallbacks + 841(Choreographer.java:841) at android.view.Choreographer.doFrame + 772(Choreographer.java:772) at android.view.Choreographer$FrameDisplayEventReceiver.run + 1015(Choreographer.java:1015) at android.os.Handler.handleCallback + 794(Handler.java:794) at android.os.Handler.dispatchMessage + 99(Handler.java:99) at android.os.Looper.loop + 176(Looper.java:176) at android.app.ActivityThread.main + 6651(ActivityThread.java:6651) at java.lang.reflect.Method.invoke(Method.java) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run + 547(RuntimeInit.java:547) at com.android.internal.os.ZygoteInit.main + 824(ZygoteInit.java:824)

    opened by PankajSavaliya 1
  • Not compatible with the BottomAppBar's hideOnScroll.

    Not compatible with the BottomAppBar's hideOnScroll.

    When I scroll using the DragScroll, the BottomAppBar does not auto hide or show, like so:

    https://cdn-images-1.medium.com/max/800/1*0uL_CBUwf2yElYVe6wpiig.gif

    I tried adding a ScrollListener to the DragScroll, but I did not find another way to hiding the BottomAppBar other than setting it to invisible, which is not optimal since there isn't the animation as seen on the above image.

    opened by khecha 3
  • Using Indicator when the RecyclerView content is empty leads to crash

    Using Indicator when the RecyclerView content is empty leads to crash

    Similar to this Issue. Exception being thrown is IndexOutOfBoundsException, not ArrayIndexOutOfBoundsException. So the solution would be to catch parent exception.

    opened by androideveloper 2
Releases(13.4.3a)
Owner
Turing Technologies (Wynne Plaga)
🇩🇪 🇫🇷 🇺🇸 --- Student and lead mobile developer for NextUp Music (http://www.nextupmusic.org)
Turing Technologies (Wynne Plaga)
A Material design Android pincode library. Supports Fingerprint.

LolliPin A Lollipop material design styled android pincode library (API 14+) To include in your project, add this to your build.gradle file: //Loll

Omada Health 1.6k Nov 25, 2022
[Deprecated] Android Library that implements Snackbars (former known as Undobar) from Google's Material Design documentation.

UndoBar This lib is deprecated in favor of Google's Design Support Library which includes a Snackbar and is no longer being developed. Thanks for all

Kai Liao 577 Nov 25, 2022
A library that provides an implementation of the banner widget from the Material design.

MaterialBanner A banner displays a prominent message and related optional actions. MaterialBanner is a library that provides an implementation of the

Sergey Ivanov 252 Nov 18, 2022
Material Design implementation for Android 4.0+. Shadows, ripples, vectors, fonts, animations, widgets, rounded corners and more.

Carbon Material Design implementation for Android 4.0 and newer. This is not the exact copy of the Lollipop's API and features. It's a custom implemen

null 3k Dec 30, 2022
A skeleton of google's appcompat android navigation drawer with material design.

Lollipop AppCompat Skeleton A skeleton of google's appcompat android navigation drawer with material design. Compatible to work on 4.0+ Based on Googl

Sachin Shinde 99 Nov 29, 2022
Material Design tap target for Android. https://sjwall.github.io/MaterialTapTargetPrompt/

Material Tap Target Prompt A Tap Target implementation in Android based on Material Design Onboarding guidelines. For more information on tap targets

Sam Wall 1.5k Jan 4, 2023
(Deprecated) A custom view component that mimics the new Material Design Bottom Navigation pattern.

BottomBar (Deprecated) I don't have time to maintain this anymore. I basically wrote the whole library in a rush, without tests, while being a serious

Iiro Krankka 8.4k Dec 29, 2022
An implementation of tap targets from the Material Design guidelines for feature discovery.

TapTargetView An implementation of tap targets from Google's Material Design guidelines on feature discovery. Min SDK: 14 JavaDoc Installation TapTar

Keepsafe 5.2k Dec 30, 2022
Pulseq is a service for monitoring activity from all your devices.

Pulseq is inspired by technically-functional/heartbeat, which is licensed under the ISC license. The main idea of pulseq is to provide statistics on y

d1snin-dev 5 Sep 8, 2022
Android Material Json Form Wizard is a library for creating beautiful form based wizards within your app just by defining json in a particular format.

Android Json Wizard Android Json Wizard is a library for creating beautiful form based wizards within your app just by defining json in a particular f

Vijay Rawat 355 Nov 11, 2022
Kotlin Wrapper Library of Material-UI

kotlin-material-ui Kotlin Wrapper Library of Material-UI Core: Lab: Installation repositories { jcenter() // or maven { url 'https://dl.bintra

Subroh Nishikori 78 Nov 24, 2022
Frogo Android UI Kit - Frogo UI Design Kit Guideline

About This Project Follow-up project from frogo-ui-kit UI Kit for helping you in apps development Migrate from frogo-ui-kit Just renaming package com.

Frogobox 6 Nov 25, 2022
ScratchView 7.0 0.0 L4 Java repo is UX Design involving scratch cards like views which are scratched to reveal the information they conceal.

ScratchView Intro ScratchView repo is UX Design involving scratch cards like views which are scratched to reveal the information they conceal. There a

Harish Sridharan 1.1k Dec 24, 2022
ScratchView repo is UX Design involving scratch cards like views which are scratched to reveal the information they conceal.

ScratchView Intro ScratchView repo is UX Design involving scratch cards like views which are scratched to reveal the information they conceal. There a

Harish Sridharan 1.1k Dec 24, 2022
Awesome RunnerBe design system and more!

Honeycomb Awesome RunnerBe design system and more! Core Preview 아직 모든 요소가 구현되지 않았으며 단순히 미리보기 입니다 class MainActivity : AppCompatActivity() { overri

RunnerBe 2 Apr 21, 2022
NeoPOP was created with one simple goal; to create the next generation of a beautiful, affirmative design system

NeoPop is CRED's inbuilt library for using NeoPop components in your app

CRED 254 Dec 29, 2022
Create an header for com.google.android.material.navigation.NavigationView

Header View This is a view for NavigationView in android.support.design library Import At the moment the library is in my personal maven repo reposito

Raphaël Bussa 106 Nov 25, 2022
Inspired by Heinrich Reimer Material Intro and developed with love from scratch

Android Material Intro Screen Material intro screen is inspired by Material Intro and developed with love from scratch. I decided to rewrite completel

Tango Agency 2.7k Dec 19, 2022
A material Switch with icon animations and color transitions

Material Animated Switch A material Switch with icon animations and color transitions Sample video: Youtube Material Animated Switch video Sample app:

Adrián Lomas 1.2k Dec 29, 2022