【问题标题】:Disable Sundays and any other Specific Date禁用星期日和任何其他特定日期
【发布时间】:2016-11-25 07:40:05
【问题描述】:

我想在 Android 日期选择器中禁用特定月份的星期日和特定日期

我使用的Datepicker是android datepicker:

Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.MONTH, 1);
calendar.setMinimalDaysInFirstWeek(27);
// calendar.add(Calendar.DAY_OF_MONTH, 1);
//calendar.set(2016,11,23);
// new   DatePickerDialog(LoginSuccess.this, listener, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)).show();
DatePickerDialog dpDialog = new DatePickerDialog(LoginSuccess.this, listener, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH));
// dpDialog.updateDate(2016,11,23);

DatePicker datePicker = dpDialog.getDatePicker();
//datePicker.updateDate(2016,11,23);
// Date newDate = calendar.getTime();
//dpDialog.getDatePicker().setMinDate(newDate.getTime());
//datePicker.init();

if (calendar.get(Calendar.DAY_OF_MONTH)==Calendar.SUNDAY) {
   // dpDialog.setTitle("Sorry Sundays wont be accepted");
   // dpDialog.setMessage("not selected");
   // dpDialog.show();
    //datePicker.setBackgroundColor(000000);
    Color.parseColor("#000000");
}
else {
    long now = System.currentTimeMillis();

    datePicker.setFirstDayOfWeek(Calendar.MONDAY);
    datePicker.setMinDate(now + (1000 * 60 * 60 * 24 * 1));
    datePicker.setMaxDate(calendar.getTimeInMillis());
    dpDialog.show();
}

public DatePickerDialog.OnDateSetListener listener = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.MONTH, 1);

        //calendar.set(2016,11,23);
        display.setText("Selected Date:" + (dayOfMonth) + "/" + (monthOfYear + 1) + "/" + year);
            Button ok = (Button) findViewById(R.id.confirm);
            ok.setOnClickListener((v) -> {
                Intent intent = new Intent(LoginSuccess.this, Confirm.class);
                intent.putExtra("Date", dayOfMonth + "/" + (monthOfYear + 1) + "/" + year);
                intent.putExtra("name", (String) spinnerOsversions.getSelectedItem());
                intent.putExtra("email4", email3.toString());
                intent.putExtra("bikeno4", bikeno3.toString());
                intent.putExtra("fname", fname.toString());
                //intent.putExtras(b);
                startActivity(intent);
                finish();
            });
    }

SetMinDate 和 setMaxdate 工作正常,但我只想禁用周日和特定日子。

【问题讨论】:

标签: java android-datepicker


【解决方案1】:

您可以使用https://github.com/wdullaer/MaterialDateTimePicker#additional-options

使用以下代码:
datePicker.setSelectableDays(Calendar[] days)

并将所有可用的日期放入 datePicker。

【讨论】:

    【解决方案2】:

    这对于默认的 DatePickerDialog 是不可能的。您可能想查看MaterialDateTimePicker。

    在com.wdullaer.materialdatetimepicker.date.DatePickerDialog 中你有public void setSelectableDays(Calendar[] selectableDays) 的方法。

    【讨论】:

      【解决方案3】:

      您正在使用calendar.get(Calendar.DAY_OF_MONTH) 匹配星期天 使用 DAY_OF_WEEK 取值 SUNDAY、MONDAY、TUESDAY、WEDNESDAY、THURSDAY、FRIDAY 和 SATURDAY

      if (calendar.get(Calendar.DAY_OF_WEEK).equals(Calendar.SUNDAY)) {
         // dpDialog.setTitle("Sorry Sundays wont be accepted");
         // dpDialog.setMessage("not selected");
         // dpDialog.show();
          //datePicker.setBackgroundColor(000000);
          Color.parseColor("#000000");
      }
      

      【讨论】:

      • 这修复了 OP 示例代码中的一个 if 语句,但它实际上并没有在日期选择器中禁用星期日/防止用户选择星期日。
      【解决方案4】:

      使用MaterialDatePicker 中的https://github.com/material-components/material-components-android

      val constraintsBuilder =
              CalendarConstraints.Builder().setValidator(DateValidatorWeekdays()).build()
      
          MaterialDatePicker.Builder.datePicker().setCalendarConstraints(constraintsBuilder).build()
              .show(childFragmentManager, "Data_Picker")
      

      DateValidator 类:

      https://github.com/material-components/material-components-android/blob/master/catalog/java/io/material/catalog/datepicker/DateValidatorWeekdays.java

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-12
        • 1970-01-01
        相关资源
        最近更新 更多