Java android studio禁用日期选择器起的天数

Java android studio禁用日期选择器起的天数,java,android,datetime,datepicker,android-calendar,Java,Android,Datetime,Datepicker,Android Calendar,我想禁用日期选择器 我有一个数组来存储我要禁用的日期 我有这个代码来禁用日历中的日期 for (Calendar loopdate = min_date_c; min_date_c.before(max_date_c); min_date_c.add(Calendar.DATE, 1), loopdate = min_date_c) { int dayOfWeek

我想禁用日期选择器 我有一个数组来存储我要禁用的日期

我有这个代码来禁用日历中的日期

    for (Calendar loopdate = min_date_c;
                     min_date_c.before(max_date_c);
                     min_date_c.add(Calendar.DATE, 1), loopdate = min_date_c) {
                    int dayOfWeek = loopdate.get(Calendar.DAY_OF_WEEK);


                    if (dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.FRIDAY) {
                        Calendar[] disabledDays = new Calendar[1];
                        disabledDays[0] = loopdate;
                        datePickerDialog.setDisabledDays(disabledDays);
                    }
                }
我尝试了这段代码来禁用存储在arraylist中的日期,但它不起作用。它仅禁用arraylist中的第一项

   ArrayList a=new ArrayList();
            a.add(1);  //saturday
            a.add(2);  //sunday
            a.add(3);  //monday
            int day;


            for(int i=0; i<a.size();i++) {

                day=(Integer)a.get(i);



                for (Calendar loopdate = min_date_c;
                     min_date_c.before(max_date_c);
                     min_date_c.add(Calendar.DATE, 1), loopdate = min_date_c) {
                    int dayOfWeek = loopdate.get(Calendar.DAY_OF_WEEK);



                    if (day == 1) {
                        System.out.println(day);
                        if (dayOfWeek == Calendar.SATURDAY || dayOfWeek == Calendar.FRIDAY) {
                            Calendar[] disabledDays = new Calendar[1];
                            disabledDays[0] = loopdate;
                            datePickerDialog.setDisabledDays(disabledDays);
                        }
                    }

                  else  if (day==2) {
                        System.out.println(day);

                        if (dayOfWeek == Calendar.SUNDAY || dayOfWeek == Calendar.FRIDAY) {
                            Calendar[] disabledDays = new Calendar[1];
                            disabledDays[0] = loopdate;
                            datePickerDialog.setDisabledDays(disabledDays);
                        }
                    }

                   else if (day==3) {
                        System.out.println(day);
                        if (dayOfWeek == Calendar.MONDAY || dayOfWeek == Calendar.FRIDAY) {
                            Calendar[] disabledDays = new Calendar[1];
                            disabledDays[0] = loopdate;
                            datePickerDialog.setDisabledDays(disabledDays);
                        }
                    }


                }

如何修复此问题?

我使用此代码显示没有天数的日期选择器

DatePickerDialog datePickerDialog = new DatePickerDialog(
        RacingRsActivity.this,
        android.R.style.Theme_Holo_Dialog,
        new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year,
                                  int monthOfYear, int dayOfMonth) {
                dateRc.setText(DateUtil.getCalendarHeaderDate(getDateFromDatePicker(view)));
                mYear = year;
                mMonth = monthOfYear;
                mDay = dayOfMonth;
            }
        },
        mYear, mMonth, mDay);
datePickerDialog.getDatePicker().findViewById(getResources().getIdentifier("day", "id", "android")).setVisibility(View.GONE);
datePickerDialog.show();

我使用这段代码来显示没有天数的日期选择器

DatePickerDialog datePickerDialog = new DatePickerDialog(
        RacingRsActivity.this,
        android.R.style.Theme_Holo_Dialog,
        new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year,
                                  int monthOfYear, int dayOfMonth) {
                dateRc.setText(DateUtil.getCalendarHeaderDate(getDateFromDatePicker(view)));
                mYear = year;
                mMonth = monthOfYear;
                mDay = dayOfMonth;
            }
        },
        mYear, mMonth, mDay);
datePickerDialog.getDatePicker().findViewById(getResources().getIdentifier("day", "id", "android")).setVisibility(View.GONE);
datePickerDialog.show();

您可以使用“材质设计”组件更轻松有效地控制日历;它允许您通过实现界面来控制日历的每一天

特别是在你的问题,你需要禁用特定的日子;因此,您将创建一个实现CalendarConstraints.DateValidator的类,然后:

重写所需的方法,并构建一个Parcelable CalendarConstraints.DateValidator扩展了Parcelable,以便跨多个站点维护DateValidator 设备配置更改。包裹在两个包裹之间传递时会断裂 过程

重写验证每个日期的isValidlong date方法 并返回一个布尔值,该布尔值指示 日期是否有效,换句话说,如果启用或禁用/暗显日期;因此,如果一个日期是有效的,那么它将返回true,并且该日期将被用户启用以供选择。 下面,我将提供一个验证器,在2020年2月禁用星期一;你可以用同样的方式轻松地禁用任何一天

实现CalendarConstraints.DateValidator:

最后在活动/片段中构建MaterialDatePicker

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    MaterialDatePicker.Builder<Long> builderRange = MaterialDatePicker.Builder.datePicker();
    builderRange.setCalendarConstraints(mondayDisableConstraints().build());
    builderRange.setTitleText("Select Date Range");
    MaterialDatePicker<Long> pickerRange = builderRange.build();
    pickerRange.show(getSupportFragmentManager(), pickerRange.toString());

}
这是输出:


希望这能帮助你,并欢迎进一步的支持

您可以使用材质设计组件更轻松有效地控制日历;它允许您通过实现界面来控制日历的每一天

特别是在你的问题,你需要禁用特定的日子;因此,您将创建一个实现CalendarConstraints.DateValidator的类,然后:

重写所需的方法,并构建一个Parcelable CalendarConstraints.DateValidator扩展了Parcelable,以便跨多个站点维护DateValidator 设备配置更改。包裹在两个包裹之间传递时会断裂 过程

重写验证每个日期的isValidlong date方法 并返回一个布尔值,该布尔值指示 日期是否有效,换句话说,如果启用或禁用/暗显日期;因此,如果一个日期是有效的,那么它将返回true,并且该日期将被用户启用以供选择。 下面,我将提供一个验证器,在2020年2月禁用星期一;你可以用同样的方式轻松地禁用任何一天

实现CalendarConstraints.DateValidator:

最后在活动/片段中构建MaterialDatePicker

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    MaterialDatePicker.Builder<Long> builderRange = MaterialDatePicker.Builder.datePicker();
    builderRange.setCalendarConstraints(mondayDisableConstraints().build());
    builderRange.setTitleText("Select Date Range");
    MaterialDatePicker<Long> pickerRange = builderRange.build();
    pickerRange.show(getSupportFragmentManager(), pickerRange.toString());

}
这是输出:


希望这能帮助你,并欢迎进一步的支持

编辑以获得更好的可读性编辑以获得更好的可读性无需每天?仅选择月份和年份。否我希望我的日历有日、月、年,但禁用某些特定日期,例如星期日、星期三、星期五或我想在阵列中使用的任何其他日期无需每天?仅选择月份和年份。否我希望我的日历有日、月、,一年,但禁用一些特定的日子,例如星期天,星期三,星期五或任何其他天,我想在我的数组中HH非常感谢它真的很有用。。。非常感谢你给我你的时间…哦,非常感谢它真的很有用。。。非常感谢你给我时间。。。