android - 如何在 Android Material Calendar 中禁用日期

标签 android

我正在使用 Material CalendarView 和基于 array 的日期 CalenderView 突出显示日期。所以我想禁用除日期数组之外的日期。

 datePickerDialog = new Dialog(MainActivity.getInstance());
                    datePickerDialog.show();
                    datePickerDialog.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
                    datePickerDialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);
                    datePickerDialog.setCancelable(true);
                    datePickerDialog.getWindow().setBackgroundDrawableResource(android.R.color.transparent);
                    datePickerDialog.setContentView(R.layout.assignment_custom_datepicker);
                    materialCalendarView = (MaterialCalendarView) datePickerDialog.findViewById(R.id.calendarView);
                  //  materialCalendarView.setShowOtherDates(MaterialCalendarView.SHOW_ALL);
                    materialCalendarView.setFirstDayOfWeek(Calendar.SUNDAY);
                    materialCalendarView.invalidate();

                    materialCalendarView.setHeaderTextAppearance(R.style.TextAppearance_AppCompat_Medium);
                    materialCalendarView.setDateTextAppearance(R.drawable.background_solid_blue);
                    materialCalendarView.setDateTextAppearance(R.style.TextAppearance_AppCompat_Medium);
                    materialCalendarView.setWeekDayTextAppearance(R.style.TextAppearance_AppCompat_Medium);
                    materialCalendarView.setSelectionMode(MaterialCalendarView.SELECTION_MODE_SINGLE);

                  //  materialCalendarView.setWeekDayTextAppearance();
                    materialCalendarView.setDateTextAppearance(R.style.WalletFragmentDefaultButtonTextAppearance);
                    Calendar selectDayCalendar = Calendar.getInstance();
                    selectDayCalendar.set(mYear, mMonth, mDay);
                    materialCalendarView.addDecorators(
                            new OneDayDecorator()
                    );
                    if (calendarDays != null && !calendarDays.isEmpty() ) {
                        materialCalendarView.addDecorator(new EventDecorator(Color.RED, calendarDays));
                        materialCalendarView.setOnDateChangedListener(this);


                    }
                    else
                    {
                        // materialCalendarView.setOnDateChangedListener(this);
                    }
                    if (readcalendarDays != null && !readcalendarDays.isEmpty()) {
                        materialCalendarView.addDecorator(new EventDecorator(Color.GREEN, readcalendarDays));

                    }

最佳答案

尝试以下操作:

ArrayList<CalendarDay> enabledDates = new ArrayList<>();

//Some for loop on dates{
    enabledDates.add(new CalendarDay(date));
}

materialCalendarView.addDecorator(calendarDecorator.new DayEnableDecorator(enabledDates));

DayEnableDecorator 是一个单独的类:

public class DayEnableDecorator implements DayViewDecorator{
    private HashSet<CalendarDay> dates;

    public DayEnableDecorator(Collection<CalendarDay> dates) {
        this.dates = new HashSet<>(dates);
    }

    @Override
    public boolean shouldDecorate(CalendarDay day) {
        return dates.contains(day);
    }

    @Override
    public void decorate(DayViewFacade view) {
        view.setDaysDisabled(false);
    }
}

这将启用您放入数组 enabledDates 中的日期并禁用其余日期

关于android - 如何在 Android Material Calendar 中禁用日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37649567/

相关文章:

java - Bug - ListView -> 项目 -> 按钮 OnClick : Change background color of parent

Android:如何改变不仅仅是文本、文本颜色和图像资源?

android - 如何在 fragment 中使用 ViewPager

android - 如何通过 Firebase 中的存储引用获取文件大小

java - 单击数字键盘上的 "Done"按钮时应用程序崩溃

java - 在树莓派中编译安卓应用

Android 网页 View : HTML Content is Overlapping

android - 用于 OCR 的 Google Drive SDK

android - 我应该在哪里散列用户密码?

android - 防止状态栏出现android(修改)