是否可以通过Android MaterialCalendarView将多个DotSpan附加到一个日期?
尽管我在CalendarView中添加了2个DotSpan,但仍只显示1个DotSpan ...
我正在使用以下代码:

@Override
public boolean shouldDecorate(CalendarDay day) {
    day.copyTo(calendar);
    for (int i = 0; i < weekDayStrTmp.size(); i++) {
        if (weekDayStrTmp.contains(day)) {
            return true;
        } else {
            return false;
        }
    }
    return false;
}

@Override
public void decorate(DayViewFacade view) {
    view.addSpan(new DotSpan(8, myContext.getResources().getColor(R.color.myColor3)));
    view.addSpan(new DotSpan(8, myContext.getResources().getColor(R.color.myColor3)));
}

最佳答案

您正在用第二个覆盖第一个DotSpan。
给定的DotSpan类使您可以在文本下方创建居中的彩色圆点,因此,如果将一个圆点放在另一个圆点的上方,则第一个圆点将不可见。

我设法在同一DayViewFacade View 上创建了几个DotSpans,我不确定这是否是您搜索的确切解决方案,但我敢肯定这会有所帮助:

因此,您必须创建一个自定义的Decorator类,该类由实现DayViewDecorator ,我们将其称为OrangeDecorator。

您必须创建另一个自定义类,该类由实现LineBackgroundSpan ,我们将其称为MyCustomOrangeSpan。

这两个类与从原始库中获取的原始DotSpan和EventDecorator几乎相同,但是您可以根据需要自定义这些类。

在“装饰”功能(OrangeDecorator类)上,使用自定义LineBackgroundSpan,如下所示:

@Override
public void decorate(DayViewFacade view) {
    view.addSpan(new MyCustomOrangeSpan(6, ContextCompat.getColor(mContext, R.color.AppOrange)));
}

在“drawBackground”功能(MyCustomOrangeSpan类)上,您将能够将圆放置在 Canvas 内,所以让我们开始吧:
@Override
    public void drawBackground(Canvas canvas, Paint paint, int left, int right, int top, int baseline,
                               int bottom, CharSequence text, int start, int end, int lnum) {

        int oldColor = paint.getColor();
        if (color != 0) {
            paint.setColor(color);
        }

        canvas.drawCircle((left + right) / 2 - 20, bottom + radius, radius, paint);
        paint.setColor(oldColor);

    }

这样,我们可以创建多个DayViewDecorators和LineBackgroundSpan(用于不同的位置):
BlueDecorator blueDecorator = new BlueDecorator(getActivity(),eventsDays,eventsMap);
OrangeDecorator orangeDecorator = new OrangeDecorator(getActivity(),eventsDays,eventsMap);
GreenDecorator greenDecorator = new GreenDecorator(getActivity(),eventsDays,eventsMap);
materialCalendarView.addDecorator(blueDecorator);
materialCalendarView.addDecorator(orangeDecorator);
materialCalendarView.addDecorator(greenDecorator);

10-07 20:56