如何在日期选择器对话框中设置日期限制
How to set the limit on date in Date picker dialog
我想限制日期,这样用户就不能选择超过 7 个日期,例如,如果今天是 1 月 1 日,那么用户不能 select 选择超过 7 个日期,我的意思是他不能 select 1 月 9 日。我也希望他不要select年月。所以我限制在一周内完成他的任务。
到目前为止我所做的是显示日期选择器片段并在其中设置当前日期。我的主 activity 中的代码是这样的:
etSelectDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment datePickerFragment = new DatePickerFragment() {
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
Log.d("Date Change", "onDateSet");
Calendar c = Calendar.getInstance();
c.set(year, month, day);
DateFormat df = DateFormat.getDateInstance();
etSelectDate.setText(df.format(c.getTime()));
//nextField.requestFocus(); //moves the focus to something else after dialog is closed
}
};
datePickerFragment.show(MainActivity.this.getSupportFragmentManager(), "datePicker");
}
});
和日期选择器片段 class 是这样的:
public static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
//blah
}
}
到那时它工作正常,但我不知道如何限制日期,其余的月份和年份应该不 Select 可以。我见过很多 link,例如 this,但我不明白我该怎么做,而且 android 网站上也没有任何帮助。
So please help me , How can I put limit of seven days only
更新
通过你的回复我知道了如何在日历中设置最大日期,所以我想将最大日期设置为比当前日期提前 7 天,但我仍然没有得到它。到目前为止我读到的方法是:
pickerDialog.getDatePicker().setMaxDate(new Date().getTime());
它正在将当前日期设置为最大日期,但是由于它是 Date 对象,我怎样才能在其中添加 7 天呢?请帮助
通过使用
setMinDate
和 setMaxDate
试试这个
DatePickerDialog dpDialog = new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay);
DatePicker datePicker = dpDialog.getDatePicker();
Calendar calendar = Calendar.getInstance();//get the current day
datePicker.setMaxDate(calendar.getTimeInMillis());//set the current day as the max date or put yore date in miliseconds.
datePicker.setMinDate(calendar.getTimeInMillis());//set the current day as the min date or put your date in mili seconds format
return dpDialog;
您可以使用 setMinDate(long)
和 setMaxDate(long)
方法。这两个都适用于 API 级别 11 及以上。由于您使用的是 DatePickerDialog
,您需要先通过调用 getDatePicker()
方法获取底层 DatePicker。
dpdialog.getDatePicker().setMinDate(minDate);
dpdialog.getDatePicker().setmaxDate(maxDate);
来源:Set Limit on the DatePickerDialog in Android?
您可以使用
计算最小日期
Date today = new Date();
Calendar c = Calendar.getInstance();
c.setTime(today);
c.add( Calendar.MONTH, -6 ) // Subtract 6 months
long minDate = c.getTime().getTime() // Twice!
更新:
替换下面一行
return new DatePickerDialog(getActivity(), this, year, month, day);
和
// Create a new instance of DatePickerDialog and return it
DatePickerDialog pickerDialog = new DatePickerDialog(getActivity(), this, year, month, day);
pickerDialog.getDatePicker().setMaxDate(maxDate);
pickerDialog.getDatePicker().setMinDate(minDate);
return pickerDialog;
在某些情况下,当您使用没有小时和分钟的日期设置最大日期时,您将无法 select 您设置的最大日期。
例如
Calendar maxDate = Calendar.getInstance();
maxDate.set(Calendar.DAY_OF_MONTH, day + 5);
maxDate.set(Calendar.MONTH, month);
maxDate.set(Calendar.YEAR, year);
datePickerDialog.getDatePicker().setMaxDate(maxDate.getTimeInMillis());
使用上面的代码块,您无法点击您的 maxDate。
但是如果加上小时和分钟就喜欢;
maxDate.set(Calendar.HOUR, 23);
maxDate.set(Calendar.MINUTE, 59);
到你的 maxDate,你的最后一个日期将是可点击的
我想限制日期,这样用户就不能选择超过 7 个日期,例如,如果今天是 1 月 1 日,那么用户不能 select 选择超过 7 个日期,我的意思是他不能 select 1 月 9 日。我也希望他不要select年月。所以我限制在一周内完成他的任务。
到目前为止我所做的是显示日期选择器片段并在其中设置当前日期。我的主 activity 中的代码是这样的:
etSelectDate.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
DialogFragment datePickerFragment = new DatePickerFragment() {
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
Log.d("Date Change", "onDateSet");
Calendar c = Calendar.getInstance();
c.set(year, month, day);
DateFormat df = DateFormat.getDateInstance();
etSelectDate.setText(df.format(c.getTime()));
//nextField.requestFocus(); //moves the focus to something else after dialog is closed
}
};
datePickerFragment.show(MainActivity.this.getSupportFragmentManager(), "datePicker");
}
});
和日期选择器片段 class 是这样的:
public static class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
// Use the current date as the default date in the picker
final Calendar c = Calendar.getInstance();
int year = c.get(Calendar.YEAR);
int month = c.get(Calendar.MONTH);
int day = c.get(Calendar.DAY_OF_MONTH);
// Create a new instance of DatePickerDialog and return it
return new DatePickerDialog(getActivity(), this, year, month, day);
}
@Override
public void onDateSet(DatePicker view, int year, int month, int day) {
//blah
}
}
到那时它工作正常,但我不知道如何限制日期,其余的月份和年份应该不 Select 可以。我见过很多 link,例如 this,但我不明白我该怎么做,而且 android 网站上也没有任何帮助。
So please help me , How can I put limit of seven days only
更新
通过你的回复我知道了如何在日历中设置最大日期,所以我想将最大日期设置为比当前日期提前 7 天,但我仍然没有得到它。到目前为止我读到的方法是:
pickerDialog.getDatePicker().setMaxDate(new Date().getTime());
它正在将当前日期设置为最大日期,但是由于它是 Date 对象,我怎样才能在其中添加 7 天呢?请帮助
通过使用
setMinDate
和 setMaxDate
试试这个
DatePickerDialog dpDialog = new DatePickerDialog(this, pDateSetListener, pYear, pMonth, pDay);
DatePicker datePicker = dpDialog.getDatePicker();
Calendar calendar = Calendar.getInstance();//get the current day
datePicker.setMaxDate(calendar.getTimeInMillis());//set the current day as the max date or put yore date in miliseconds.
datePicker.setMinDate(calendar.getTimeInMillis());//set the current day as the min date or put your date in mili seconds format
return dpDialog;
您可以使用 setMinDate(long)
和 setMaxDate(long)
方法。这两个都适用于 API 级别 11 及以上。由于您使用的是 DatePickerDialog
,您需要先通过调用 getDatePicker()
方法获取底层 DatePicker。
dpdialog.getDatePicker().setMinDate(minDate);
dpdialog.getDatePicker().setmaxDate(maxDate);
来源:Set Limit on the DatePickerDialog in Android?
您可以使用
计算最小日期Date today = new Date();
Calendar c = Calendar.getInstance();
c.setTime(today);
c.add( Calendar.MONTH, -6 ) // Subtract 6 months
long minDate = c.getTime().getTime() // Twice!
更新:
替换下面一行
return new DatePickerDialog(getActivity(), this, year, month, day);
和
// Create a new instance of DatePickerDialog and return it
DatePickerDialog pickerDialog = new DatePickerDialog(getActivity(), this, year, month, day);
pickerDialog.getDatePicker().setMaxDate(maxDate);
pickerDialog.getDatePicker().setMinDate(minDate);
return pickerDialog;
在某些情况下,当您使用没有小时和分钟的日期设置最大日期时,您将无法 select 您设置的最大日期。 例如
Calendar maxDate = Calendar.getInstance();
maxDate.set(Calendar.DAY_OF_MONTH, day + 5);
maxDate.set(Calendar.MONTH, month);
maxDate.set(Calendar.YEAR, year);
datePickerDialog.getDatePicker().setMaxDate(maxDate.getTimeInMillis());
使用上面的代码块,您无法点击您的 maxDate。
但是如果加上小时和分钟就喜欢;
maxDate.set(Calendar.HOUR, 23);
maxDate.set(Calendar.MINUTE, 59);
到你的 maxDate,你的最后一个日期将是可点击的