A material horizontal calendar view for Android based on RecyclerView

Overview

Horizontal Calendar

Download License

A material horizontal calendar view for Android based on RecyclerView.

showcase

Installation

The library is hosted on jcenter, add this to your build.gradle:

repositories {
      jcenter()
    }
    
dependencies {
      compile 'devs.mulham.horizontalcalendar:horizontalcalendar:1.3.4'
    }

Prerequisites

The minimum API level supported by this library is API 14 (ICE_CREAM_SANDWICH).

Usage

  • Add HorizontalCalendarView to your layout file, for example:
<android.support.design.widget.AppBarLayout>
		............ 
		
        <devs.mulham.horizontalcalendar.HorizontalCalendarView
            android:id="@+id/calendarView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:background="@color/colorPrimary"
            app:textColorSelected="#FFFF"/>
            
</android.support.design.widget.AppBarLayout>
  • In your Activity or Fragment, define your start and end dates to set the range of the calendar:
/* starts before 1 month from now */
Calendar startDate = Calendar.getInstance();
startDate.add(Calendar.MONTH, -1);

/* ends after 1 month from now */
Calendar endDate = Calendar.getInstance();
endDate.add(Calendar.MONTH, 1);
  • Then setup HorizontalCalendar in your Activity through its Builder:
HorizontalCalendar horizontalCalendar = new HorizontalCalendar.Builder(this, R.id.calendarView)
                .range(startDate, endDate)
                .datesNumberOnScreen(5)
                .build();
  • Or if you are using a Fragment:
HorizontalCalendar horizontalCalendar = new HorizontalCalendar.Builder(rootView, R.id.calendarView)
	...................
  • To listen to date change events you need to set a listener:
horizontalCalendar.setCalendarListener(new HorizontalCalendarListener() {
            @Override
            public void onDateSelected(Calendar date, int position) {
                //do something
            }
        });
  • You can also listen to scroll and long press events by overriding each perspective method within HorizontalCalendarListener:
horizontalCalendar.setCalendarListener(new HorizontalCalendarListener() {
            @Override
            public void onDateSelected(Calendar date, int position) {

            }

            @Override
            public void onCalendarScroll(HorizontalCalendarView calendarView, 
            int dx, int dy) {
                
            }

            @Override
            public boolean onDateLongClicked(Calendar date, int position) {
                return true;
            }
        });

Customization

  • You can customize it directly inside your layout:
<devs.mulham.horizontalcalendar.HorizontalCalendarView
            android:id="@+id/calendarView"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:textColorNormal="#bababa"
            app:textColorSelected="#FFFF"
            app:selectorColor="#c62828"  //default to colorAccent
            app:selectedDateBackground="@drawable/myDrawable"/>
  • Or you can do it programmatically in your Activity or Fragment using HorizontalCalendar.Builder:
HorizontalCalendar horizontalCalendar = new HorizontalCalendar.Builder(this, R.id.calendarView)
                .range(Calendar startDate, Calendar endDate)
                .datesNumberOnScreen(int number)   // Number of Dates cells shown on screen (default to 5).
                .configure()    // starts configuration.
                    .formatTopText(String dateFormat)       // default to "MMM".
                    .formatMiddleText(String dateFormat)    // default to "dd".
                    .formatBottomText(String dateFormat)    // default to "EEE".
                    .showTopText(boolean show)              // show or hide TopText (default to true).
                    .showBottomText(boolean show)           // show or hide BottomText (default to true).
                    .textColor(int normalColor, int selectedColor)    // default to (Color.LTGRAY, Color.WHITE).
                    .selectedDateBackground(Drawable background)      // set selected date cell background.
                    .selectorColor(int color)               // set selection indicator bar's color (default to colorAccent).
                .end()          // ends configuration.
                .defaultSelectedDate(Calendar date)    // Date to be selected at start (default to current day `Calendar.getInstance()`).
                .build();

More Customizations

builder.configure()
           .textSize(float topTextSize, float middleTextSize, float bottomTextSize)
           .sizeTopText(float size)
           .sizeMiddleText(float size)
           .sizeBottomText(float size)
           .colorTextTop(int normalColor, int selectedColor)
           .colorTextMiddle(int normalColor, int selectedColor)
           .colorTextBottom(int normalColor, int selectedColor)
       .end()

Months Mode

HorizontalCalendar can display only Months instead of Dates by adding mode(HorizontalCalendar.Mode.MONTHS) to the builder, for example:

horizontalCalendar = new HorizontalCalendar.Builder(this, R.id.calendarView)
                .range(Calendar startDate, Calendar endDate)
                .datesNumberOnScreen(int number)
                .mode(HorizontalCalendar.Mode.MONTHS)
                .configure()
                    .formatMiddleText("MMM")
                    .formatBottomText("yyyy")
                    .showTopText(false)
                    .showBottomText(true)
                    .textColor(Color.LTGRAY, Color.WHITE)
                .end()
                .defaultSelectedDate(defaultSelectedDate)

Events

A list of Events can be provided for each Date which will be represented as circle indicators under the Date with:

builder.addEvents(new CalendarEventsPredicate() {

                    @Override
                    public List<CalendarEvent> events(Calendar date) {
                        // test the date and return a list of CalendarEvent to assosiate with this Date.
                    }
                })

Reconfiguration

HorizontalCalendar configurations can be changed after initialization:

  • Change calendar dates range:
horizontalCalendar.setRange(Calendar startDate, Calendar endDate);
  • Change default(not selected) items style:
horizontalCalendar.getDefaultStyle()
        .setColorTopText(int color)
        .setColorMiddleText(int color)
        .setColorBottomText(int color)
        .setBackground(Drawable background);      
  • Change selected item style:
horizontalCalendar.getSelectedItemStyle()
        .setColorTopText(int color)
        ..............
  • Change formats, text sizes and selector color:
horizontalCalendar.getConfig()
        .setSelectorColor(int color)
        .setFormatTopText(String format)
        .setSizeTopText(float size)
        ..............

Important

Make sure to call horizontalCalendar.refresh(); when you finish your changes

Features

  • Disable specific dates with HorizontalCalendarPredicate, a unique style for disabled dates can be specified as well with CalendarItemStyle:
builder.disableDates(new HorizontalCalendarPredicate() {
                           @Override
                           public boolean test(Calendar date) {
                               return false;    // return true if this date should be disabled, false otherwise.
                           }
       
                           @Override
                           public CalendarItemStyle style() {
                               return null;     // create and return a new Style for disabled dates, or null if no styling needed.
                           }
                       })
  • Select a specific Date programmatically with the option whether to play the animation or not:
horizontalCalendar.selectDate(Calendar date, boolean immediate); // set immediate to false to ignore animation.
	// or simply
horizontalCalendar.goToday(boolean immediate);
  • Check if a date is contained in the Calendar:
horizontalCalendar.contains(Calendar date);
  • Check if two dates are equal (year, month, day of month):
Utils.isSameDate(Calendar date1, Calendar date2);
  • Get number of days between two dates:
Utils.daysBetween(Calendar startInclusive, Calendar endExclusive);

Contributing

Contributions are welcome, feel free to submit a pull request.

License

Copyright 2017 Mulham Raee

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
  • Request: avoid useless calls to notifyDataSetChanged when scrolling

    Request: avoid useless calls to notifyDataSetChanged when scrolling

    You should only refresh the views of the RecyclerView when needed.

    Currently what you do is this:

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            //On Scroll, agenda is refresh to update background colors
            post(new Runnable() {
                @Override
                public void run() {
                    mCalendarAdapter.notifyDataSetChanged();
                }
            });
            ...
        }
    

    First, the "post" is not needed because you are already on the UI thread. Second, on most cases, when scrolling, the selected item doesn't change, so it's not needed to call notifyDataSetChanged. Instead, you can check if the previously selected item is the same as the current one, and only if they are not, call notifyDataSetChanged.

    duplicate 
    opened by AndroidDeveloperLB 20
  • Bug: goToday not immediate enough

    Bug: goToday not immediate enough

    Expected Behavior / Goal

    To go straight to the given date, by using: horizontalCalendar.goToday(true);

    Actual Behavior

    It doesn't always go so quickly to there. Depends on device or Android version

    Steps to Reproduce the Problem (sample code if possible)

    1. Make the date range large. I used this: https://github.com/Mulham-Raee/Horizontal-Calendar/issues/45
    2. scroll a lot.
    3. Choose to go to current day.

    Specifications

    • Android Version: 6.0.1 on OnePlus 2
    • Horizontal-Calendar Version: 1.1.8

    See how slow it can be (took about 2 seconds to reach there) : VID_20171024_121150 (1).zip

    Performance issue Reproduction required 
    opened by AndroidDeveloperLB 10
  • How to set the min and max dates range to be largest as possible?

    How to set the min and max dates range to be largest as possible?

    Currently I use this:

        Calendar startDate = Calendar.getInstance();
        startDate.setTime(new Date(0L));
        Calendar endDate = Calendar.getInstance();
        endDate.add(Calendar.YEAR, 120);
    
        horizontalCalendar = new HorizontalCalendar.Builder(this, R.id.calendarView)
                .startDate(startDate.getTime())
                .endDate(endDate.getTime())
                ...
    

    but what's the largest range this library support?

    opened by AndroidDeveloperLB 10
  • goToday() and selectDate() selecting incorrect date

    goToday() and selectDate() selecting incorrect date

    Expected Behavior / Goal

    I have placed a button in my toolbar that should return the horizontal calendar to today.

    Actual Behavior

    Upon clicking the today button, the horizontal calendar will intermittently return to the wrong day.

    Steps to Reproduce the Problem

    I have tried this 2 different ways:

    Using selectDate()

      if(id == R.id.today_button) {
                Calendar today = Calendar.getInstance();
                if(mHorizontalCalendar != null){
                    mHorizontalCalendar.selectDate(today, true);
                }
            }
    

    Using goToday()

     if(id == R.id.today_button) {
                if(mHorizontalCalendar != null){
                    mHorizontalCalendar.goToday(true);
                }
            }
    

    When using selectDate(), the outcome is intermittently 1 day before (ie. today is Tuesday, it will switch between selecting Monday and Tuesday as today)

    When using goToday(), the outcome is intermittently 1 day before, or 1 day after (ie. today is Tuesday, it will switch between selecting Monday, Tuesday, and Wednesday as today)

    Specifications

    • Android Version: 6.0.1 and 8.1.0
    • Horizontal-Calendar Version: 1.3.2
    opened by alliejc 8
  • Request: reduce lags while scrolling

    Request: reduce lags while scrolling

    I've noticed that when performing a fast scrolling of the view, there is sometimes lag. a jump between frames.

    Enabling the "profile GPU rendering", I noticed that indeed it can get very slow :

    image

    At first I thought it's something with the adapter onBindViewHolder function, but it's far from the truth. The real reason for this, is that the scrolling constantly calls notifyDataSetChanged, as I wrote here:

        @Override
        public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
            //On Scroll, agenda is refresh to update background colors
            post(new Runnable() {
                @Override
                public void run() {
                    mCalendarAdapter.notifyDataSetChanged();
                }
            });
    

    Commenting this part, scrolling becomes super smooth, but of course there won't be any selection of items during scroll:

    image

    Please do think of a better way to update the views. It doesn't make sense to update all of the views, whenever you scroll, or even whenever a new selection is made. Only 2 views are supposed to be updated, and only when the selection has changed.

    enhancement Performance issue 
    opened by AndroidDeveloperLB 7
  • Reset Horizontal-Calendar settings

    Reset Horizontal-Calendar settings

    I want to reinitialize the HorizontalCalendar every time I select Spinner item.

    But I get below error: java.lang.IllegalStateException: An instance of OnFlingListener already set.

    For following code :

     sp_bkapt_select_pgm.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                    System.out.println("I m setSpinner : " + adapterView.getItemAtPosition(i));
    
        horizontalCalendar_viewSch = new HorizontalCalendar.Builder(Activity_ViewAppointmentsSchedule.this, R.id.horizontalCalendar_viewSch)
                                    .startDate(actualStrtDate)
                                    .endDate(endDate)
                                    .datesNumberOnScreen(5)
                                    .dayNameFormat("EEE")
                                    .dayNumberFormat("dd")
                                    .monthFormat("MMM")
                                    .showDayName(true)
                                    .showMonthName(true)
                                    .defaultSelectedDate(strtDate)
                                    .textColor(Color.parseColor("#191919"), Color.WHITE)
                                    .build();       
    
    
                }
    
                @Override
                public void onNothingSelected(AdapterView<?> adapterView) {
    
                }
            });
    
    enhancement 
    opened by ritesh94 7
  • Incorrect default date is selected

    Incorrect default date is selected

    Hi, I have a small issue here, today it is 22nd January, but default date displayed on calendar is 26th January, even when I call "goToday" or "selectDate".

    Also, the methods "getDateEndCalendar" and "getDateStartCalendar" return 22nd December and 22nd February, which is correct, but rendered dates are from 20th December to 24th February.

    This is my code, I am not doing anything special.

    calendar = new HorizontalCalendar.Builder(layout, R.id.date_picker).build();
    calendar.setCalendarListener(new CalendarListener(this));
    

    and layout file

    <devs.mulham.horizontalcalendar.HorizontalCalendarView
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    android:background="#fff"
                    app:textColorNormal="#000"
                    app:textColorSelected="#fff"
                    app:selectorColor="#000"
                    app:selectedDateBackground="#000"
                    android:id="@+id/date_picker" />
    

    EDIT: Building on Android 4.4.2 with appcompat-v7:25.1.0

    question 
    opened by mp205 7
  • How to disable dates in calendar?

    How to disable dates in calendar?

    Expected Behavior / Goal

    ?

    Actual Behavior

    ?

    Steps to Reproduce the Problem (sample code if possible)

    Specifications

    • Android Version:
    • Horizontal-Calendar Version:
    Feature request 
    opened by sairajkishore 6
  • Is there a way to highlight particular dates in the tabs?

    Is there a way to highlight particular dates in the tabs?

    I was wondering if there is a way to use some markers or such thing to highlight a particular date, such as when the user has events on that date? For example, I would like to achieve something of this sort with the calendar (look at the right screen):

    alt tag

    Is there a way to customize the calendar to achieve that?

    Feature request 
    opened by jsingh-jasmeet 6
  • Calendar defaults to yesterday/tomorrow when datesNumberOnScreen set to 3

    Calendar defaults to yesterday/tomorrow when datesNumberOnScreen set to 3

    Thank you for the work that's gone into this very useful library.

    Unfortunately I am experiencing an issue where the calendar always defaults to tomorrow's date (occasionally yesterday's). I'am configuring the Calendar as shown below...

    `private HorizontalCalendar initCalendar() { Calendar endDate = Calendar.getInstance(); endDate.add(Calendar.DAY_OF_MONTH, 1); Calendar startDate = Calendar.getInstance(); startDate.add(Calendar.DAY_OF_MONTH, -1);

        return new HorizontalCalendar.Builder(this, R.id.calendarView)
                .startDate(startDate.getTime())
                .endDate(endDate.getTime())
                .datesNumberOnScreen(3)   // Number of Dates cells shown on screen (Recommended 5)
                .dayNameFormat("EEE")      // WeekDay text format
                .dayNumberFormat("dd")    // Date format
                .monthFormat("MMM")      // Month format
                .showDayName(true)          // Show or Hide dayName text
                .showMonthName(true)      // Show or Hide month text
                .textColor(Color.LTGRAY, Color.WHITE)    // Text color for none selected Dates
                .selectorColor(Color.BLUE)   // Color of the selection indicator bar (default to colorAccent).
                .build();
    
    }`
    

    The value of 'onDateSelected' when the calendar is initialised is always today's date yet the Calendar shows tomorrow as selected. I understand that the recommended 'datesNumberOnScreen' value is 5 and i've found that this issue doesn't happen when changing the value of 5.

    I would ideally like to show 3 dates if this is possible, and I've tried setting defaultSelectedDate() to today and running goToday(true) without success.

    I've tested a previous version of my project - with datesNumberOnScreen set to 3 - and it works as expected. This has started happening in a branch where I have made a number of upgrades to my project including upgrading to 'com.android.tools.build:gradle:3.0.1'

    Any assistance with this issue would be much appreciated. Many thanks

    duplicate 
    opened by mg931 5
  • default date selection or goToday doesn't show current date selected

    default date selection or goToday doesn't show current date selected

    when we are using defaultSelectedDate the calendar is not selecting current in stead it selects one day back to the current date.

    also i gave **horizontalCalendar.goToday(true); **horizontalCalendar.selectDate(new Date(),true); so for above settings also it shows it is not selected current date.

    Expected Behavior / Goal

    ? It has to select by default current date.

    Actual Behavior

    ?

    Steps to Reproduce the Problem (sample code if possible)

    HorizontalCalendar horizontalCalendar = new HorizontalCalendar.Builder(this, R.id.calendarView) .startDate(startDate.getTime()) .endDate(endDate.getTime()) .datesNumberOnScreen(7) .dayNameFormat("EEE") .dayNumberFormat("dd") .monthFormat("MMM") .showDayName(true) .showMonthName(true) .selectedDateBackground(ContextCompat.getDrawable(this, R.drawable.ic_selectable_background)) .defaultSelectedDate(defaultDate.getTime()) .textColor(Color.GRAY, Color.rgb(15,26,42)) .selectorColor(Color.rgb(15,26,42)) .build();

    Above is my constructor am using.

    Specifications

    • Android Version:
    • Horizontal-Calendar Version:
    bug 
    opened by sairajkishore 5
  • XML Error

    XML Error

    Expected Behavior / Goal

    ?

    Actual Behavior

    ?

    Steps to Reproduce the Problem (sample code if possible)

    Specifications

    • Android Version:
    • Horizontal-Calendar Version: 1.3.4
    opened by darias08 0
  • How i disable previous day selection in calender?

    How i disable previous day selection in calender?

    Expected Behavior / Goal

    ?

    Actual Behavior

    ?

    Steps to Reproduce the Problem (sample code if possible)

    Specifications

    • Android Version:
    • Horizontal-Calendar Version:
    opened by sanjeet007 6
  • is possible to reconfig disabled dates ?

    is possible to reconfig disabled dates ?

    Expected Behavior / Goal

    ?

    Actual Behavior

    ?

    Steps to Reproduce the Problem (sample code if possible)

    Specifications

    • Android Version:
    • Horizontal-Calendar Version:
    opened by irfan-429 0
  • jcenter migration please

    jcenter migration please

    Expected Behavior / Goal

    ?

    Actual Behavior

    ?

    Steps to Reproduce the Problem (sample code if possible)

    Specifications

    • Android Version:
    • Horizontal-Calendar Version:
    opened by andrewindayang 2
Releases(v1.3.2)
  • v1.3.2(Jan 15, 2018)

  • v1.3.0(Dec 27, 2017)

    Breaking changes

    • Switched to java.util.Calendar instead of java.util.Date.
    • Replaced builder.startDate() and builder.endDate() methods with builder.range().

    New Features

    • Added the ability to change calendar dates range and configs after initialization.

    Enhancements

    • Added ripple effect on click.
    Source code(tar.gz)
    Source code(zip)
  • v1.2.5(Dec 21, 2017)

    Breaking changes

    • MonthName renamed to TopText
    • DayNumber renamed to MiddleText
    • DayName renamed to BottomText
    • customization through HorizontalCalendar.Builder requires calling builder.configure() method to start then end() method to finish customization.

    New Features

    • Specific Dates can be disabled and styled with a custom style with CalendarPredicate.
    • Text color can now be changed individually for each text (top, middle and bottom).

    Bugs Fixed

    • Method OnDateSelected() is called once the view is created.
    Source code(tar.gz)
    Source code(zip)
  • v1.2.2(Dec 15, 2017)

    Breaking changes

    • Minimum supported SdkVersion upgraded to 14

    Bugs Fixed

    • Fixed wrong item being selected when number of dates on screen is not 5
    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Oct 25, 2017)

    Bugs Fixed

    • Fixed invalid multiple calls to onDateSelected() event.

    Performance optimizations

    • Reduced lag while scrolling.
    • Faster search for date position in the calendar.

    credits to @AndroidDeveloperLB

    Source code(tar.gz)
    Source code(zip)
  • v1.1.8(Oct 20, 2017)

  • v1.1.7(Jun 1, 2017)

    Bugs Fixed

    • Fixed an ArrayIndexOutOfBoundsException in case of synchronous clicking different dates.
    • Fixed onDateSelected() callback not getting called when using selctDate() with immediate parameter set to true.
    Source code(tar.gz)
    Source code(zip)
  • v1.1.5(May 4, 2017)

    Bugs Fixed

    • Fixed a bug when selecting a date with immediate as true, causing the old date to stay selected.

    New Features

    • Added possibility to define default selected Date through the Builder: builder.defaultSelectedDate().

    Deprecated Method

    • builder.centerToday() is no longer available, use builder.defaultSelectedDate(new Date()) instead
    Source code(tar.gz)
    Source code(zip)
  • v1.1.1(Apr 10, 2017)

  • v1.1.0(Mar 12, 2017)

    New Features

    • Month and Day's name can be hidden.
    • Month format can be changed now.

    Improvements :

    • Scroll snapping now uses LinearSnapHelper for smoother animation. credit to @aleksey-ho
    Source code(tar.gz)
    Source code(zip)
Owner
Mulham Raee
Android & Java Developer.
Mulham Raee
Library containing over 2000 material vector icons that can be easily used as Drawable or as a standalone View.

Material Icon Library A library containing over 2000 material vector icons that can be easily used as Drawable, a standalone View or inside menu resou

null 2.3k Dec 16, 2022
Floating Action Button for Android based on Material Design specification

FloatingActionButton Yet another library for drawing Material Design promoted actions. Features Support for normal 56dp and mini 40dp buttons. Customi

Zendesk 6.4k Dec 26, 2022
Floating Action Button for Android based on Material Design specification

FloatingActionButton Yet another library for drawing Material Design promoted actions. Features Support for normal 56dp and mini 40dp buttons. Customi

Zendesk 6.4k Jan 3, 2023
Provides 9-patch based drop shadow for view elements. Works on API level 9 or later.

Material Shadow 9-Patch This library provides 9-patch based drop shadow for view elements. Works on API level 14 or later. Target platforms API level

Haruki Hasegawa 481 Dec 19, 2022
📱Android Library to implement animated, 😍beautiful, 🎨stylish Material Dialog in android apps easily.

Material Dialogs for Android ?? ?? Android Library to implement animated, ?? beautiful, ?? stylish Material Dialog in android apps easily. 1. Material

Shreyas Patil 875 Dec 28, 2022
MaterialPickers-in-android - A simple android project that shows how to create material pickers for date and time

MaterialPickers-in-android A simple android project that shows how to create mat

Segun Francis 2 Apr 28, 2022
A library to bring fully animated Material Design components to pre-Lolipop Android.

Material MaterialLibrary is an Open Source Android library that back-port Material Design components to pre-Lolipop Android. MaterialLibrary's origina

Rey Pham 6k Dec 21, 2022
The flexible, easy to use, all in one drawer library for your Android project. Now brand new with material 2 design.

MaterialDrawer ... the flexible, easy to use, all in one drawer library for your Android project. What's included ?? • Setup ??️ • Migration Guide ??

Mike Penz 11.6k Dec 27, 2022
Implementation of Ripple effect from Material Design for Android API 9+

RippleEffect ExpandableLayout provides an easy way to create a view called header with an expandable view. Both view are external layout to allow a ma

Robin Chutaux 4.9k Dec 30, 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 Jan 9, 2023
Android drawer icon with material design animation

LDrawer Android drawer icon with material design animation Note Basically same as appcompat_v7 version 21, you can use appcompat_v7 compile 'com.andro

Hasan Keklik 1.4k Dec 25, 2022
[] Android Library that implements Snackbars from Google's Material Design documentation.

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

null 1.5k Dec 16, 2022
Android Sample Project with Material Design and Toolbar.

AndroidMaterialDesignToolbar -- PROJECT IS NOT SUPPORTED Android Sample Project with Material Design and Toolbar. Project use Appcompat library for ma

kemal selim tekinarslan 713 Nov 11, 2022
Material style circular progress bar for Android

Material CircularProgressView Indeterminate Determinate Description This CircularProgressView is a (surprisingly) circular progress bar Android View t

Rahat Ahmed 760 Nov 30, 2022
Default colors and dimens per Material Design guidelines and Android Design guidelines inside one library.

Material Design Dimens Default colors and dimens per Material Design guidelines and Android Design guidelines inside one library. Dimens Pattern: R.di

Dmitry Malkovich 1.4k Jan 3, 2023
Android drawer icon with material design animation

LDrawer Android drawer icon with material design animation Note Basically same as appcompat_v7 version 21, you can use appcompat_v7 compile 'com.andro

Hasan Keklik 1.4k Dec 25, 2022
Material style morphing play-pause drawable for Android

Play There is no need to explain what this thing does, just take a look at the gif below. Including in your project Add to your root build.gradle: all

Alexey Derbyshev 58 Jul 11, 2022
A library support form with material design, construct same with Android UI Framework

SwingUI A slight Java Swing library support form with material design, construct same with Android UI Framework writen in Kotlin Supported: 1. Screen:

Cuong V. Nguyen 3 Jul 20, 2021
Android Material Design Components

Android-Material-Design-Components Material design is a comprehensive guide for visual, motion, and interaction design across platforms and devices. G

Velmurugan Murugesan 3 Jun 10, 2022