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