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);
    }


Logo

瓜分20万奖金 获得内推名额 丰厚实物奖励 易参与易上手

更多推荐