对于此视图,我从 github Prolific Interactive ( material-calendarview) 中获取了参考或示例概念 所以我自定义了日期选择器,选择范围选择突出显示下方的可绘制对象,您将看到日期选择器 。所以我使用了范围选择方法来过时以突出显示,我的观点与实际的 ui 设计不同,所以告诉我知道要解决这个问题,在下面我将发布我的代码
@Override
public void onRangeSelected(@NonNull MaterialCalendarView widget, @NonNull List<CalendarDay> dates) {
Log.d(TAG, "onRangeSelected: ");
dateList.clear();
for(int i=0; i<dates.size(); i++){
Log.d(TAG, "onRangeSelected: year "+dates.get(i).getYear());
Log.d(TAG, "onRangeSelected:day "+dates.get(i).getDay());
Log.d(TAG, "onRangeSelected:month "+dates.get(i).getMonth());
String output=String.valueOf(dates.get(i).getYear())+"-"+String.valueOf(dates.get(i).getMonth())+"-"+
String.valueOf(dates.get(i).getDay());
Log.d(TAG, "onRangeSelected: finaldate "+output);
dateList.add(output);
datesCenter.clear();
datesLeft.clear();
datesRight.clear();
}
Log.d(TAG, "onRangeSelected: final datelist "+String.valueOf( dateList));
List<LocalDate> localDateList = new ArrayList<>();
for (String string : dateList) {
LocalDate calendar = getLocalDate(string);
if (calendar != null) {
localDateList.add(calendar);
Log.d(TAG, "onRangeSelected: localdatesize"+localDateList.size());
}
}
size=localDateList.size();
for (LocalDate localDate : localDateList) {
boolean right = false;
boolean left = false;
for (LocalDate day1 : localDateList) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (localDate.isEqual(day1.plusDays(1))) {
left = true;
}
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
if (day1.isEqual(localDate.plusDays(1))) {
right = true;
}
}
}
if (left && right) {
datesCenter.add(CalendarDay.from(localDate));
} else if (left) {
datesLeft.add(CalendarDay.from(localDate));
} else if (right) {
datesRight.add(CalendarDay.from(localDate));
}
}
setDecor(datesCenter, R.drawable.ic_green);
setDecor(datesLeft, R.drawable.ic_ellipse_30);
setDecor(datesRight, R.drawable.ic_ellipse_30);
}
void setDecor(List<CalendarDay> calendarDayList, int drawable) {
widget.addDecorators(new EventDecorator(MainActivity.this
, drawable
, calendarDayList));
}