I found a great library to add events to our own CalendarView.
Credits : SundeepK
github : https://github.com/SundeepK/CompactCalendarView
Step: 1
======
Add Dependency to build.gradle file
dependencies { compile 'com.github.sundeepk:compact-calendar-view:1.8.3' }
Step: 2
======
Create an XML Layout like below with CompactCalendarView.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout 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="wrap_content" android:orientation="vertical"> <android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:elevation="4dp" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" /> <com.github.sundeepk.compactcalendarview.CompactCalendarView android:id="@+id/compactcalendar_view" android:layout_width="match_parent" android:layout_height="250dp" android:paddingLeft="16dp" android:paddingRight="16dp" app:compactCalendarBackgroundColor="#00bcd4" app:compactCalendarCurrentDayBackgroundColor="#1a8cd7" app:compactCalendarCurrentSelectedDayBackgroundColor="#E57373" app:compactCalendarTextColor="#FFF" app:compactCalendarTextSize="12sp" /> </LinearLayout> |
Step: 3
======
Create an Activity
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 | package com.pratap.calendarview; import android.graphics.Color; import android.os.Bundle; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.widget.Toast; import com.github.sundeepk.compactcalendarview.CompactCalendarView; import com.github.sundeepk.compactcalendarview.domain.CalendarDayEvent; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Locale; public class MainActivity extends AppCompatActivity { private Toolbar toolbar; CompactCalendarView compactCalendarView; private SimpleDateFormat dateFormatForMonth = new SimpleDateFormat("MMMM- yyyy", Locale.getDefault()); private Calendar currentCalender = Calendar.getInstance(Locale.getDefault()); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); final ActionBar actionBar = getSupportActionBar(); actionBar.setHomeAsUpIndicator(R.drawable.ic_menu_white_24px); actionBar.setDisplayHomeAsUpEnabled(true); // Setting default toolbar title to empty actionBar.setTitle(null); compactCalendarView = (CompactCalendarView) findViewById(R.id.compactcalendar_view); compactCalendarView.drawSmallIndicatorForEvents(true); compactCalendarView.setUseThreeLetterAbbreviation(true); //set initial title actionBar.setTitle(dateFormatForMonth.format(compactCalendarView.getFirstDayOfCurrentMonth())); //set title on calendar scroll compactCalendarView.setListener(new CompactCalendarView.CompactCalendarViewListener() { @Override public void onDayClick(Date dateClicked) { Toast.makeText(MainActivity.this, "Date : " + dateClicked.toString(), Toast.LENGTH_SHORT).show(); } @Override public void onMonthScroll(Date firstDayOfNewMonth) { // Changes toolbar title on monthChange actionBar.setTitle(dateFormatForMonth.format(firstDayOfNewMonth)); } }); addDummyEvents(); // gotoToday(); } // Adding dummy events in calendar view for April, may, june 2016 private void addDummyEvents() { addEvents(compactCalendarView, Calendar.APRIL); addEvents(compactCalendarView, Calendar.MAY); addEvents(compactCalendarView, Calendar.JUNE); // Refresh calendar to update events compactCalendarView.invalidate(); } // Adding events from 1 to 6 days private void addEvents(CompactCalendarView compactCalendarView, int month) { currentCalender.setTime(new Date()); currentCalender.set(Calendar.DAY_OF_MONTH, 1); Date firstDayOfMonth = currentCalender.getTime(); for (int i = 0; i < 6; i++) { currentCalender.setTime(firstDayOfMonth); if (month > -1) { currentCalender.set(Calendar.MONTH, month); } currentCalender.add(Calendar.DATE, i); setToMidnight(currentCalender); compactCalendarView.addEvent(new CalendarDayEvent(currentCalender.getTimeInMillis(), Color.argb(255, 255, 255, 255)), false); } } private void setToMidnight(Calendar calendar) { calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); calendar.set(Calendar.MILLISECOND, 0); } public void gotoToday() { // Set any date to navigate to particular date compactCalendarView.setCurrentDate(Calendar.getInstance(Locale.getDefault()).getTime()); } } |
Screenshot
========
Source Code
==========
Dropbox Link
Demo
====