I took the library, it has a standard layout for displaying events, but it does not fit. There is an opportunity to add your own, but I can't.
public class AdminFragment extends Fragment implements CalendarPickerController { private AdminViewModel mViewModel; private AdminFragmentBinding binding; AdminWorkingTimeControlCardBinding binding2; private DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("dd.MM.yyyy"); private DateTime selectedDate; public static AdminFragment newInstance() { return new AdminFragment(); } @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { binding = DataBindingUtil.inflate(inflater, R.layout.admin_fragment, container, false); binding2 = AdminWorkingTimeControlCardBinding.inflate(LayoutInflater.from(getContext()), container,false); mViewModel = ViewModelProviders.of(this).get(AdminViewModel.class); Long userId = getArguments().getLong(WorkersViewModel.workerIdToAdminTag); Log.d("work_tag", "Получил юзер Id: " + Long.toString(userId)); mViewModel.getUsersActivities(userId).observe(AdminFragment.this, calendarEvents -> binding.agendaCalendarView.init(calendarEvents, mViewModel.minDate, mViewModel.maxDate, Locale.getDefault(), this)); binding.agendaCalendarView.addEventRenderer(new ActivityEventRenderer(binding2)); return binding.getRoot(); } @Override public void onActivityCreated(@Nullable Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mViewModel = ViewModelProviders.of(this).get(AdminViewModel.class); binding.setModel(mViewModel); } @Override public void onDaySelected(DayItem dayItem) { selectedDate = new DateTime(dayItem.getDate()); binding.currentDateTextView.setText(selectedDate.toString(dateTimeFormatter)); } @Override public void onEventSelected(CalendarEvent event) { Toast.makeText(getContext(), String.format("Selected event: %s", event), Toast.LENGTH_SHORT).show(); } @Override public void onScrollToDate(Calendar calendar) { selectedDate = new DateTime(calendar.getTime()); binding.currentDateTextView.setText(selectedDate.toString(dateTimeFormatter)); } Class to add your layout:
public class ActivityEventRenderer extends EventRenderer<ActivityEvent> { AdminWorkingTimeControlCardBinding binding; public ActivityEventRenderer(AdminWorkingTimeControlCardBinding binding) { this.binding = binding; } @Override public void render(View view, ActivityEvent event) { bind(event); } void bind(ActivityEvent event) { binding.statusTextView.setText(event.getTitle()); binding.commentTextView.setText(event.getDescription()); binding.timeButton.setText("12;00"); binding.executePendingBindings(); } @Override public int getEventLayout() { return R.layout.admin_working_time_control_card; } @Override public Class<ActivityEvent> getRenderType() { return ActivityEvent.class; } AdminFragment layout:
<layout xmlns:agendaCalendar="http://schemas.android.com/apk/res-auto"> <data> <variable name="model" type="com.gu.team.workingtimecontrol.viewmodels.AdminViewModel" /> <variable name="user" type="com.gu.team.workingtimecontrol.data.UserRepository" /> </data> <androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ui.fragments.AdminFragment"> <LinearLayout android:id="@+id/linearLayoutWithRecyclerView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginStart="8dp" android:layout_marginEnd="8dp" android:orientation="vertical" app:layout_behavior="@string/appbar_scrolling_view_behavior" app:layout_constraintTop_toBottomOf="@+id/app_bar"> <TextView android:id="@+id/currentDateTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:text="@{model.currentDate}" android:textColor="@color/colorAccent" /> <GridLayout android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="center" android:columnCount="8" android:focusableInTouchMode="true" android:padding="8dp" android:rowCount="3"> <ImageView android:id="@+id/baseline_alarm_black_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_rowSpan="2" android:layout_columnSpan="2" android:layout_gravity="center" android:contentDescription="@string/baseline_alarm_black" android:padding="8dp" app:srcCompat="@drawable/baseline_alarm_black_18dp" /> <ImageView android:id="@+id/baseline_pause_circle_outline_black_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_rowSpan="2" android:layout_columnSpan="2" android:layout_gravity="center" android:contentDescription="@string/baseline_pause_circle_outline_black" android:padding="8dp" app:srcCompat="@drawable/baseline_pause_circle_outline_black_18dp" /> <ImageView android:id="@+id/baseline_credit_card_black_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_rowSpan="2" android:layout_columnSpan="2" android:layout_gravity="center" android:contentDescription="@string/baseline_credit_card_black" android:padding="8dp" app:srcCompat="@drawable/baseline_credit_card_black_18dp" /> <ImageView android:id="@+id/baseline_monetization_on_black_image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_rowSpan="2" android:layout_columnSpan="2" android:layout_gravity="center" android:contentDescription="@string/baseline_monetization_on_black" android:padding="8dp" app:srcCompat="@drawable/baseline_monetization_on_black_18dp" /> <TextView android:id="@+id/workTimeTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_columnSpan="2" android:layout_gravity="center" android:maxLines="2" android:padding="8dp" android:text="@={model.adminViewData.workTime}" /> <TextView android:id="@+id/breakTimeTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_columnSpan="2" android:padding="8dp" android:text="@={model.adminViewData.breakTime}" /> <TextView android:id="@+id/salaryPerHourTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_columnSpan="2" android:padding="8dp" android:text="@={model.adminViewData.salaryPerHour}" tools:layout_editor_absoluteX="163dp" tools:layout_editor_absoluteY="402dp" /> <TextView android:id="@+id/allSalaryTextView" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_columnSpan="2" android:padding="8dp" android:text="@={model.adminViewData.allSalary}" /> </GridLayout> <com.github.tibolte.agendacalendarview.AgendaCalendarView android:id="@+id/agenda_calendar_view" android:layout_height="match_parent" agendaCalendar:agendaCurrentDayTextColor="@color/colorPrimary" agendaCalendar:calendarColor="@color/colorPrimary" agendaCalendar:calendarCurrentDayTextColor="@color/calendar_text_current_day" agendaCalendar:calendarDayTextColor="@color/theme_text_icons" agendaCalendar:calendarHeaderColor="@color/colorPrimaryDark" agendaCalendar:calendarPastDayTextColor="@color/theme_light_primary" android:layout_width="match_parent" agendaCalendar:fabColor="@color/colorPrimary" /> </LinearLayout> </androidx.coordinatorlayout.widget.CoordinatorLayout> Layout to attach:
<?xml version="1.0" encoding="utf-8"?> <data> <variable name="activity" type="com.gu.team.workingtimecontrol.common.Activity" /> <variable name="click" type="com.gu.team.workingtimecontrol.viewmodels.EditTimeClickHandler" /> </data> <com.github.tibolte.agendacalendarview.agenda.AgendaEventView xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/admin_working_time_control_card" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_vertical" android:orientation="horizontal" android:layout_margin="8dp"> <RelativeLayout android:id="@+id/view_agenda_event_description_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:padding="2dp"> <Button android:id="@+id/time_button" android:layout_width="48dp" android:layout_height="48dp" android:layout_alignParentStart="true" android:background="@drawable/round" android:textSize="10sp" /> <TextView android:id="@+id/status_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_toEndOf="@+id/time_button" android:paddingStart="8dp" android:paddingEnd="8dp" android:text="@={activity.name}" android:textSize="15sp" /> <TextView android:id="@+id/comment_text_view" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_below="@+id/status_text_view" android:layout_toEndOf="@+id/time_button" android:paddingStart="8dp" android:paddingEnd="8dp" android:text="@={activity.comment}" android:textSize="12sp"/> <ImageButton android:id="@+id/edit_time_image_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_centerVertical="true" app:srcCompat="@drawable/baseline_edit_black_18dp" android:background="@android:color/white" android:contentDescription="@string/baseline_edit_black_18dp" android:onClick="@{click::onEditTimeClick}" /> </RelativeLayout> </com.github.tibolte.agendacalendarview.agenda.AgendaEventView>