https://github.com/prolificinteractive/material-calendarview
最近在实现一个日期功能,接触到了这个优秀的android端的三方控件。关于这个控件的一些其他自定义需求(给特定日期下面加点、修改title等),有很多相关的blog,我就不在这里写了。这一篇主要是写一下怎么修改日期的颜色。(好像没找到相关的文章
其实这个控件的具体实现是使用viewpager等实现的,每一个日期都是一个格子(DayView)。我这里需要实现的需求是,将周六日的日期变成灰色。
1、将星期栏的周六日变成灰色。在weekdayview这个类中修改如下代码:
public void setDayOfWeek(int dayOfWeek) {
this.dayOfWeek = dayOfWeek;
if(dayOfWeek == 1 || dayOfWeek == 7){
setText(Html.fromHtml("<font color=\"#999090\">"+formatter.format(dayOfWeek)+"</font>"));
}else {
setText(formatter.format(dayOfWeek));
}
}
2、将日期栏中的所有周六日日期变成灰色。在DayView类中作如下修改:找到所有使用到setText()方法的地方,包括setDay(), setDayFormatter()和applyFacade().在setText下面添加如下代码
if (dd == 1 || dd == 7) {
setTextAppearance(R.style.CustomTextApp2);
}
这里的dd变量为我新加的标识星期的变量,需要在DayView中增加一个本地int变量,同时在构造函数里添加。
public DayView(Context context, CalendarDay day , int i) {
super(context);
fadeTime = getResources().getInteger(android.R.integer.config_shortAnimTime);
setSelectionColor(this.selectionColor);
this.dd = i;//传入星期
setGravity(Gravity.CENTER);
setTextSize(30);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR1) {
setTextAlignment(TEXT_ALIGNMENT_CENTER);
}
setDay(day);
}
然后在CalendarPageView类中使用到DayView方法的地方传入这个星期变量:
protected void addDayView(Collection<DayView> dayViews, Calendar calendar) {
CalendarDay day = CalendarDay.from(calendar);
int i = calendar.get(Calendar.DAY_OF_WEEK);
DayView dayView = new DayView(getContext(), day ,i);
dayView.setOnClickListener(this);
dayViews.add(dayView);
addView(dayView, new LayoutParams());
calendar.add(DATE, 1);
}