Android开源日历控件Caldroid的使用
来自: http://www.jcodecraeer.com//a/anzhuokaifa/androidkaifa/2014/0314/1592.html
Caldroid是一个以月为单位展示日期的日历控件,主要功能在一个Fragment中。Caldroid既可以以Fragment的形式嵌套在布局中,也可以作为dialog fragment以对话框的形式展示出来。可以通过左右滑动切换月份。
Caldroid可以随意自定义属性,为了支持更多国家的实际情况,可以指定一周的开始时间,默认周日为一周的开始。Caldroid支持android2.2及以上版本。
项目配置:
要使用Caldroid,你可以参考源码中附带的demo,以便熟悉该library是如何工作的。
如果你要使用Caldroid,将Caldroid作为library导入到你的工程中,由于Caldroid使用了兼容包android-support-v4.jar,可能会因为与你项目中的android-support-v4.jar版本不一样而导致编译错误,如果出现这种情况,将Caldroid中的jar替换成你项目中的jar。
使用方法:
两种使用方式,一种是嵌入式的Fragment,一种是dialog式的。
如果是嵌入到activity中:
CaldroidFragment caldroidFragment = new CaldroidFragment(); Bundle args = new Bundle(); Calendar cal = Calendar.getInstance(); args.putInt(CaldroidFragment.MONTH, cal.get(Calendar.MONTH) + 1); args.putInt(CaldroidFragment.YEAR, cal.get(Calendar.YEAR)); caldroidFragment.setArguments(args); FragmentTransaction t = getSupportFragmentManager().beginTransaction(); t.replace(R.id.calendar1, caldroidFragment); t.commit();
不仅如此,你还可以将该Fragment作为子fragment嵌入到另外一个Fragment中。
Caldroid可以在arguments中传递很多参数:
public final static String DIALOG_TITLE = "dialogTitle"; public final static String MONTH = "month"; public final static String YEAR = "year"; public final static String SHOW_NAVIGATION_ARROWS = "showNavigationArrows"; public final static String DISABLE_DATES = "disableDates"; public final static String SELECTED_DATES = "selectedDates"; public final static String MIN_DATE = "minDate"; public final static String MAX_DATE = "maxDate"; public final static String ENABLE_SWIPE = "enableSwipe"; public final static String START_DAY_OF_WEEK = "startDayOfWeek"; public final static String SIX_WEEKS_IN_CALENDAR = "sixWeeksInCalendar"; public final static String ENABLE_CLICK_ON_DISABLED_DATES = "enableClickOnDisabledDates";
定义一周的开始,代码如下:
Bundle args = new Bundle(); args.putInt(CaldroidFragment.START_DAY_OF_WEEK, CaldroidFragment.TUESDAY); // Tuesday caldroidFragment.setArguments(args);
如果想知道用户点击了处于disabled状态下的日期:
Bundle args = new Bundle(); args.putInt(CaldroidFragment.ENABLE_CLICK_ON_DISABLED_DATES, true); caldroidFragment.setArguments(args);
如果是想用对话框的形式使用,那么你还可以指定对话框的标题,代码如下:
CaldroidFragment dialogCaldroidFragment = CaldroidFragment.newInstance("Select a date", 3, 2013); dialogCaldroidFragment.show(getSupportFragmentManager(),"TAG");
Caldroid提供了很多定义日历字体和背景颜色等样式的方法,比如:
// You can use any of below methods to set background colors public void setBackgroundResourceForDates(HashMap<Date, Integer> backgroundForDateMap); public void setBackgroundResourceForDateTimes(HashMap<DateTime, Integer> backgroundForDateTimeMap); public void setBackgroundResourceForDate(int backgroundRes, Date date); public void setBackgroundResourceForDateTime(int backgroundRes, DateTime dateTime); // Below methods is to set text color public void setTextColorForDates(HashMap<Date, Integer> textColorForDateMap); public void setTextColorForDateTimes(HashMap<DateTime, Integer> textColorForDateTimeMap); public void setTextColorForDate(int textColorRes, Date date); public void setTextColorForDateTime(int textColorRes, DateTime dateTime);
要使用这些方法,你需要在资源文件定义好颜色或者是drawable
caldroidFragment.setBackgroundResourceForDate(R.color.blue, blueDate); caldroidFragment.setBackgroundResourceForDate(R.color.green, greenDate); caldroidFragment.setTextColorForDate(R.color.white, blueDate); caldroidFragment.setTextColorForDate(R.color.white, greenDate);
设置了一些参数之后需要调用refreshView()方法才能生效。
显示或者隐藏切换月份的左右箭头
public void setShowNavigationArrows(boolean showNavigationArrows);
是否允许左右滑动
public void setEnableSwipe(boolean enableSwipe);
指定日期(跳转日期)
public void moveToDate(Date date); public void moveToDateTime(DateTime dateTime);
实现监听选中某个日期的事件
final CaldroidListener listener = new CaldroidListener() { @Override public void onSelectDate(Date date, View view) { Toast.makeText(getApplicationContext(), formatter.format(date), Toast.LENGTH_SHORT).show(); } @Override public void onChangeMonth(int month, int year) { String text = "month: " + month + " year: " + year; Toast.makeText(getApplicationContext(), text, Toast.LENGTH_SHORT).show(); } @Override public void onLongClickDate(Date date, View view) { Toast.makeText(getApplicationContext(), "Long click " + formatter.format(date), Toast.LENGTH_SHORT).show(); } @Override public void onCaldroidViewCreated() { Toast.makeText(getApplicationContext(), "Caldroid view is created", Toast.LENGTH_SHORT).show(); } }; caldroidFragment.setCaldroidListener(listener);
https://github.com/roomorama/Caldroid