我的目标是找到一个 Android 库,可以根据数组在日历视图上标记各种日期。这些日期可能是连续的,也可能不是。我理想的情况是更改每个日期的背景颜色。重要的复杂性在于,由于颜色来自服务器查询,所以我不知道这个颜色,直到运行时。
我已经研究了整整一天,我最好的希望似乎是 material-calendarview
(github)。然而,我发现他们的代码有点难以理解,这是我的问题,但我完全陷入了困境。
我已经像这样在我的 XML 布局中添加了一个日历:
<com.prolificinteractive.materialcalendarview.MaterialCalendarView
android:id="@+id/calendar_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="20dp"
android:layout_marginRight="20dp"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:mcv_showOtherDates="all"
app:mcv_selectionColor="#00F"/>
然后在我的活动中,我有这些实例变量:
private MaterialCalendarView calendarView;
private ArrayList<Date> markedDates;
并且这段代码在我的onCreateView()
中。
calendarView = (MaterialCalendarView) view.findViewById(R.id.calendar_view);
好的,很简单。但是我无法弄清楚如何从我的日期数组中标记日历。我正在研究这种方法,但我不知道该如何在这里进一步处理:
private void initializeCalendar() {
calendarView.setOnDateChangedListener(context);
calendarView.setShowOtherDates(MaterialCalendarView.SHOW_ALL);
Calendar calendar = Calendar.getInstance();
calendarView.setSelectedDate(calendar.getTime());
calendar.set(calendar.get(Calendar.YEAR), Calendar.JANUARY, 1);
calendarView.setMinimumDate(calendar.getTime());
calendar.set(calendar.get(Calendar.YEAR), Calendar.DECEMBER, 31);
calendarView.setMaximumDate(calendar.getTime());
int bgColor = sharedVisualElements.getPrimaryColor();
calendarView.addDecorators(new EventDecorator(bgColor, ????));
}
最后一行指的是这个内部类:
private class EventDecorator implements DayViewDecorator {
private final int color;
private final HashSet<CalendarDay> dates;
public EventDecorator(int color, Collection<CalendarDay> dates) {
this.color = color;
this.dates = new HashSet<>(dates);
}
@Override
public boolean shouldDecorate(CalendarDay day) {
return dates.contains(day);
}
@Override
public void decorate(DayViewFacade view) {
view.addSpan(new DotSpan(5, color));
}
}
我想将我的ArrayList<Date> markedDates
转换为他们所称的Collection<CalendarDay> dates
,你同意吗?但这就是我卡壳的地方。这个数据结构对我来说很奇怪。当我试图通过调用new CalendarDay()
来实例化它时,我的类立即扩展了约10个新方法,我不理解它们的作用或如何使用它们。显然,我已经偏离轨道了。它肯定不可能这么棘手。
有人用过这个库来完成这个任务并知道如何实现吗?我完全停滞了。此外,如果有一个更简单的库可以让我在运行时使用仅已知颜色设置背景颜色,我听取意见。
感谢任何帮助。我担心我写得很混乱,这是因为我完全糊涂了。