Il mio obiettivo è trovare una libreria Android che mi consenta di contrassegnare varie date su una vista del calendario basata su un array. Le date possono o non possono essere contigue. Il mio scenario ideale è cambiare il colore di sfondo di ogni data. La complicazione significativa è che non conosco questo colore fino al runtime, poiché verrà da una query del server.material-calendarview set background color of dates
Ho svolto ricerche per tutto questo giorno e la mia migliore speranza sembra essere material-calendarview
(github). Tuttavia, sto trovando il loro codice in qualche modo impenetrabile, che è su di me, ma sono completamente bloccato.
Ho aggiunto un calendario come questo nel mio layout 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"/>
E poi nella mia attività, ho questi variabili di istanza:
private MaterialCalendarView calendarView;
private ArrayList<Date> markedDates;
e questo codice nel mio onCreateView()
calendarView = (MaterialCalendarView) view.findViewById(R.id.calendar_view);
Ok, abbastanza facile. Ma non riesco a capire come segnare il calendario dalla mia serie di date. Sto lavorando su questo metodo, ma io non so come procedere al di là di quello che ho qui:
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, ????));
}
L'ultima linea si riferisce a questa classe interna:
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));
}
}
penso che il mio sfida a convertire il mio ArrayList<Date> markedDates
in quello che chiamano Collection<CalendarDay> dates
. Essere d'accordo? Ma questo è il posto dove mi prendo molto in giro. Questo data structure è bizzarro per me. Quando provo a creare un'istanza chiamando new CalendarDay()
, la mia classe si espande immediatamente con circa 10 nuovi metodi che non capisco il loro ruolo o che cosa fare con essi. Chiaramente, sto andando fuori dai binari qui. Non può essere così difficile.
Qualcuno ha utilizzato questa libreria per questo scopo e sa come eseguire questa operazione? Sono a una battuta di arresto. Inoltre, se c'è una libreria più semplice per permettermi di impostare i colori di sfondo usando un colore noto solo in fase di esecuzione, sono tutto orecchie.
Grazie per qualsiasi aiuto. Temo di averlo scritto in modo confuso, il che è il risultato del fatto che sono completamente confuso.
bro quando faccio che il getYear() è deprecato cosa posso fare per la sostituzione –