Mein Ziel ist es, eine Android-Bibliothek zu finden, mit der ich verschiedene Daten in einer Kalenderansicht basierend auf einem Array markieren kann. Die Daten können oder können nicht zusammenhängend sein. Mein ideales Szenario ist, die Hintergrundfarbe jedes Datums zu ändern. Die wesentliche Komplikation ist, dass ich diese Farbe erst zur Laufzeit kenne, da sie von einer Serverabfrage kommt.material-calendarview set Hintergrundfarbe der Daten
Ich habe dies den ganzen Tag erforscht, und meine beste Hoffnung scheint zu sein material-calendarview
(github). Allerdings finde ich ihren Code etwas undurchdringlich, was auf mich zutrifft, aber ich bin völlig festgefahren.
Ich habe einen Kalender wie dies in meinem XML-Layout hinzugefügt:
<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"/>
Und dann in meiner Tätigkeit habe ich diese Instanzvariablen:
private MaterialCalendarView calendarView;
private ArrayList<Date> markedDates;
und diesen Code in meinem onCreateView()
calendarView = (MaterialCalendarView) view.findViewById(R.id.calendar_view);
Ok, einfach genug. Aber ich kann nicht herausfinden, wie ich den Kalender aus meiner Datenreihe markieren soll. Ich arbeite an dieser Methode, aber ich weiß einfach nicht, wie darüber hinaus gehen, was ich habe hier:
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, ????));
}
Die letzte Zeile diese innere Klasse verweist:
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));
}
}
Ich denke, dass mein Herausforderung, meine ArrayList<Date> markedDates
in das umzuwandeln, was sie Collection<CalendarDay> dates
nennen. Zustimmen? Aber hier bin ich wirklich versaut. Diese data structure ist für mich seltsam. Wenn ich versuche, es zu instanziieren, indem ich new CalendarDay()
aufruft, erweitert meine Klasse sofort mit ungefähr 10 neuen Methoden, die ich ihre Rolle oder was mit ihnen nicht verstehe. Klar, ich gehe hier von der Strecke. Es kann einfach nicht so schwierig sein.
Hat jemand diese Bibliothek für diesen Zweck verwendet und weiß, wie man diese Aufgabe erfüllt? Ich bin am Ende. Auch wenn es eine einfachere Bibliothek gibt, die es mir ermöglicht, Hintergrundfarben mit einer Farbe zu setzen, die nur zur Laufzeit bekannt ist, bin ich ganz Ohr.
Danke für jede Hilfe. Ich befürchte, dass ich dies auf verwirrende Weise geschrieben habe, was darauf zurückzuführen ist, dass ich völlig verwirrt bin.
bro, wenn ich das tun, ist die getYear() veraltet, was kann ich tun, um das zu ersetzen –