开源日历控件Caldroid的使用

泡在网上的日子 / 文 发表于2014-03-14 00:15 次阅读 Caldroid,calendar,github

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

收藏 赞 (9) 踩 (0)
上一篇:切换Fragment时实现数据保持
Fragment设计初衷是为了简化不同屏幕分辨率的开发难度,他将代表一个功能的UI及其相关数据看做一个模块,以便达到复用。可以将Fragment看作是一个可以嵌入布局中的activity,有自己的生命周期。比如我现在在手机上有activityA和activityB,但是在平板上有更
下一篇:onMeasure方法中使用resolveSizeAndState,支持2.2
自定义View一般需要重写onMeasure方法,根据不同的需求onMeasure的实现也不同,如果你的View不是非常特别,都可以参考谷歌官方文档中对onMeasure的实现: @Overrideprotected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { // Try for a w