我正在编辑文本上应用以下代码以选择日期。
public class DatePickerFragment extends DialogFragment
{
private OnDateSetListener listener;
public DatePickerFragment(OnDateSetListener listener)
{
this.listener = listener;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState)
{
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);
return new DatePickerDialog(getActivity(), listener, year, month, day);
}
}
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
{
//do some stuff
}
void showDateDialog()
{
DatePickerFragment newFragment = new DatePickerFragment(this);
newFragment.show(getFragmentManager(), "date_picker");
}
但是,我想将所有过去的日期灰显,以便不允许用户选择其中任何一个。这可以通过代码吗?或者我应该在选择后手动检查日期是否是过去的日期?
使用 setMinDate(( 函数。它以毫秒为单位设置自 getDefault(( 时区中自 1970 年 1 月 1 日 00:00:00 以来的最小日期(以毫秒为单位(。将最小日期设置为今天的日期,以便用户无法超过该日期。类似于以下内容 onCreateDialog
:
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);
DatePickerDialog d = new DatePickerDialog(getActivity(), listener, year, month, day);
DatePicker dp = d.getDatePicker();
dp.setMinDate(c.getTimeInMillis());
return d;
使用 DatePicker.setMaxDate()
和 DatePicker.setMinDate()
设置固定年份。
例如。
Calendar c_max = Calendar.getInstance(),
Calendar c_min = Calendar.getInstance();
c_min.set(2012,0,1); // your min date boundary
c_max.set(2013,11,31); // your max date boundary
DatePicker.setMaxDate(c_max.getTimeInMillis());
DatePicker.setMinDate(c_min.getTimeInMillis());
由于 API 11 添加了setMaxDate()
和setMinDate()
,因此您可以对较低版本执行以下操作。
您可以使用初始化日期选择器方法设置范围。
// Calendar
this.calendar = new GregorianCalendar();
this.datePicker = (DatePicker) findViewById(R.id.your_datepicker_id);
// check for the build version
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// (picker is a DatePicker- set current time as min time.
this.datePicker.setMinDate(this.calendar.getTimeInMillis());
} else {
final int minYear = this.calendar.get(Calendar.YEAR);
final int minMonth = this.calendar.get(Calendar.MONTH);
final int minDay = this.calendar.get(Calendar.DAY_OF_MONTH);
this.datePicker.init(minYear, minMonth, minDay,
new OnDateChangedListener() {
public void onDateChanged(DatePicker view, int year,
int month, int day) {
Calendar newDate = Calendar.getInstance();
newDate.set(year, month, day);
if (calendar.after(newDate)) {
view.init(minYear, minMonth, minDay, this);
}
}
});
}
date button on clcik method
dateButton.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
showDialog(DATE_DIALOG_ID);
}
});
for date piker create dialog method :
case DATE_DIALOG_ID:
{
Calendar calendar = Calendar.getInstance();
final DatePickerDialog dojDPDilog = new DatePickerDialog(this,datePickerListener,calendar.get(Calendar.YEAR),calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE));
dojDPDilog.setTitle("Select Date");
try {
java.lang.reflect.Field mDatePickerField = dojDPDilog.getClass().getDeclaredField("mDatePicker");
mDatePickerField.setAccessible(true);
try {
dojDPicker = (DatePicker) mDatePickerField.get(dojDPDilog);
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
dojDPicker.init(minYear, minMonth, minDay,new OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year,int monthOfYear, int dayOfMonth) {
disableDate(view, year, monthOfYear, dayOfMonth);
}
});
return dojDPDilog;
}
for disable method:
private void disableDate(DatePicker view, int year,int monthOfYear, int dayOfMonth) {
if (year > maxYear)
{
view.updateDate(maxYear, maxMonth, maxDay);
}
else if (monthOfYear > maxMonth && year == maxYear)
{
view.updateDate(maxYear, maxMonth, maxDay);
}
else if (dayOfMonth > maxDay && year == maxYear && monthOfYear == maxMonth)
{
view.updateDate(maxYear, maxMonth, maxDay);
}
else if (year < minYear)
{
view.updateDate(minYear, monthOfYear, dayOfMonth);
}
else if (monthOfYear < minMonth && year == minYear)
{
view.updateDate(minYear, minMonth, dayOfMonth);
}
else if (dayOfMonth < minDay && year == minYear && monthOfYear == minMonth)
{
view.updateDate(minYear, minMonth, minDay);
}
}
and take local variables:
int maxYear = c.get(Calendar.YEAR) + 100;
int maxMonth = c.get(Calendar.MONTH);
int maxDay = c.get(Calendar.DAY_OF_MONTH);
int minYear = c.get(Calendar.YEAR);
int minMonth = c.get(Calendar.MONTH);
int minDay = c.get(Calendar.DAY_OF_MONTH);
嘿,在onDateSet((方法中尝试这个。这适用于片段。
Calendar calendar1 = Calendar.getInstance();
calendar1.set(2014,11-1,11);
view.setMinDate(calendar1.getTimeInMillis()-10000);