如何在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中引入
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)
使用材料组件库,只需使用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)
我是这样做的:
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)
| 归档时间: |
|
| 查看次数: |
69776 次 |
| 最近记录: |