如何在Android日期选择器中禁用过去的日期?

Add*_*ddy 67 android

如何在Android日期选择器中禁用过去的日期?

这是生成我的DatePicker的代码:

@Override
protected Dialog onCreateDialog(int id) {
    switch (id) {
    case DATE_DIALOG_ID:
        // set date picker as current date
        return new DatePickerDialog(this, datePickerListener, year, month,
                day);
    }
    return null;
}

private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {
    public void onDateSet(DatePicker view, int selectedYear,
            int selectedMonth, int selectedDay) {
        year = selectedYear;
        month = selectedMonth+1;
        day = selectedDay;

        startdate.setText(new StringBuilder().append(day).append("-")
                .append(getMonth(month + 1)).append("-").append(year)
                .append(" "));
    }
};
Run Code Online (Sandbox Code Playgroud)

Apo*_*orv 192

你可以做

datePicker.setMinDate(System.currentTimeMillis() - 1000);
Run Code Online (Sandbox Code Playgroud)

它将今天的日期设置为最小日期,并禁用所有过去的日期.

datePicker是一个对象,DatePicker如果你正在使用DatePickerDialog你可以做的对象

datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
Run Code Online (Sandbox Code Playgroud)

注意:setMinDate在API 11中引入

  • 以前的日期被禁用但可以选择:( (3认同)
  • 我可以知道有“-1000”的原因吗? (3认同)

Arv*_*ake 14

这种方法可以正常工作.

//Get yesterday's date
Calendar calendar = Calendar.getInstance();
calendar.add(Calendar.DATE, -1);

//Set yesterday time milliseconds as date pickers minimum date
DatePickerDialog datePickerDialog = new DatePickerDialog(context, myDateListener, year, month, day);
datePickerDialog.getDatePicker().setMinDate(calendar.getTimeInMillis());
datePickerDialog.show();
Run Code Online (Sandbox Code Playgroud)


Gab*_*tti 9

使用材料组件库,只需使用MaterialDatePicker并构建您自己的DateValidator或您可以使用DateValidatorPointForward库提供的。

就像是:

MaterialDatePicker.Builder<Long> builder = MaterialDatePicker.Builder.datePicker();

CalendarConstraints.DateValidator dateValidator = DateValidatorPointForward.now();
//if you need a custom date just use
//CalendarConstraints.DateValidator dateValidator = DateValidatorPointForward.from(yourDate);
constraintsBuilder.setValidator(dateValidator);
builder.setCalendarConstraints(constraintsBuilder.build());

MaterialDatePicker<Long> picker = builder.build();
picker.show(getSupportFragmentManager(), picker.toString());
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明


Ill*_*ent 8

我是这样做的:

public class DatePickerFragment extends DialogFragment {
OnDateSetListener ondateSet;
Calendar c;
int year = 0, month = 0, day = 0;

public DatePickerFragment() {
}

public void setCallBack(OnDateSetListener ondate) {
    ondateSet = ondate;
}

public static DatePickerFragment newInstance(Bundle bundle) {
    DatePickerFragment myFragment = new DatePickerFragment();
    myFragment.setArguments(bundle);
    return myFragment;
}

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    // final Calendar c = Calendar.getInstance();
//if else for null arguments
    if (getArguments() != null) {
        year = getArguments().getInt("year");
        month = getArguments().getInt("month");
        day = getArguments().getInt("day");
        c = Calendar.getInstance();
        c.set(year, month, day);

    } else {
        c = Calendar.getInstance();
        year = c.get(Calendar.YEAR);
        month = c.get(Calendar.MONTH);
        day = c.get(Calendar.DAY_OF_MONTH);
        Log.d("else", "else");
    }


    DatePickerDialog picker = new DatePickerDialog(getActivity(),
            ondateSet, year, month, day);
    picker.getDatePicker().setMinDate(c.getTime().getTime());
    Log.d("picker timestamp", c.getTime().getTime() + "");
    return picker;
}
}
Run Code Online (Sandbox Code Playgroud)

这是您实例化选择器的方式:

Bundle bundle = new Bundle();
        Calendar c = Calendar.getInstance();
        bundle.putInt("year", c.get(Calendar.YEAR));
        bundle.putInt("month", c.get(Calendar.MONTH));
        bundle.putInt("day", c.get(Calendar.DAY_OF_MONTH));
        DatePickerFragment fragment = DatePickerFragment
                .newInstance(bundle);
        fragment.setCallBack(dateSet);
        fragment.show(getActivity().getSupportFragmentManager(), null);
Run Code Online (Sandbox Code Playgroud)

这是我的实现随时改变它.请注意,此代码默认情况下将mindate设置为currnet日期.新的实例也很重要.


小智 6

如果您使用的是日期选择器

datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000);
Run Code Online (Sandbox Code Playgroud)