[英]Setting upper and lower date limits to date picker dialog
我創建了一個活動,其中有一個用於插入用戶出生日期的字段。 我使用日期選擇器來實現這一點。
這是我正在做的源代碼:
// onclick dob edittext open date picker dialog
dob.setFocusableInTouchMode(false);
dob.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//open date picker
showDialog(DATE_DIALOG_ID);
}
});
//======================For picking birth day==========================
// Creating dialog
@Override
protected Dialog onCreateDialog(int id) {
Calendar c = Calendar.getInstance();
int cyear = c.get(Calendar.YEAR);
int cmonth = c.get(Calendar.MONTH);
int cday = c.get(Calendar.DAY_OF_MONTH);
switch (id) {
case DATE_DIALOG_ID:
return new DatePickerDialog(this, mDateSetListener, cyear, cmonth, cday);
}
return null;
}
private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
// onDateSet method
public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
// String date_selected = String.valueOf(monthOfYear+1)+" /"
// +String.valueOf(dayOfMonth)+" /"
// +String.valueOf(year);
String date_selected = String.valueOf(dayOfMonth)+" /"
+String.valueOf(monthOfYear+1)+" /"
+String.valueOf(year);
//Toast.makeText(RegisterActivity.this, "Selected Date is ="+date_selected, Toast.LENGTH_SHORT).show();
dob.setText(date_selected);
}
};
//======================For picking birth day==========================
現在我要做的是將日期選擇器限制為特定年份。 像這樣:
int maxYear = c.get(Calendar.YEAR) - 15; // this year ( 2013 ) - 15 = 1998
int maxMonth = c.get(Calendar.MONTH);
int maxDay = c.get(Calendar.DAY_OF_MONTH);
int minYear = maxYear-49;
int minMonth = 0; // january
int minDay = 25;
我應該怎么做才能將上述邊界設置為日期選擇器?
// - - - - - - - - 編輯 - - - - - - - - - - - - - -
我做了這樣的事情:
//======================For picking birth day==========================
// Creating dialog
@Override
protected Dialog onCreateDialog(int id) {
Calendar c = Calendar.getInstance();
maxYear = c.get(Calendar.YEAR) - 15; // this year ( 2013 ) - 15 = 1998
maxMonth = c.get(Calendar.MONTH);
maxDay = c.get(Calendar.DAY_OF_MONTH);
switch (id) {
case DATE_DIALOG_ID:
return new DatePickerDialog(this, mDateSetListener, maxYear, maxMonth, maxDay);
}
return null;
}
DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
int minYear = maxYear-49;
int minMonth = 0; // january
int minDay = 25;
public void onDateChanged(DatePicker view, int year, int monthOfYear,int dayOfMonth) {
Date current = new Date(year, monthOfYear, dayOfMonth);
Date minDate = new Date(minYear, minMonth, minDay);
Date maxDate = new Date(maxYear, maxMonth, maxDay);
if( current.getTime() < minDate.getTime() )
{
//set to minimum date
}else if( current.getTime() > maxDate.getTime() )
{
//Set to max Date
}
}
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
String date_selected = String.valueOf(dayOfMonth)+" /"
+String.valueOf(monthOfYear+1)+" /"
+String.valueOf(year);
//Toast.makeText(RegisterActivity.this, "Selected Date is ="+date_selected, Toast.LENGTH_SHORT).show();
dob.setText(date_selected);
}
};
//======================For picking birth day==========================
這是固定上限,但下限或minDate尚未固定! 什么是要做?
OnDateChangedListener()
為您設置DatePicker
,如果設置的日期大於DatePicker.updateDate(minYear, minMonth, minDay);
限制,則在onDateChanged
函數內設置DatePicker.updateDate(minYear, minMonth, minDay);
使用此方法將其重置。
Date minDate = new Date(1990, 10, 25);
Date maxDate = new Date(2013, 4, 15);
OnDateChangedListener listener = new OnDateChangedListener() {
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
Date current = new Date(year, monthOfYear, dayOfMonth);
if( current.getTime() < minDate.getTime() )
{
//set to minimum date
}else if( current.getTime() > maxDate.getTime() )
{
//Set to max Date
}
}
};
YourDatePicker.init(2013, 4, 15, listener);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.