Use this :
public class MainActivity extends Activity {
private TextView tvDisplayDate;
private DatePicker dpResult;
private int mYear;
private int mMonth;
private int mDay;
static final int DATE_DIALOG_ID = 1;
//these variables are used to set max years need to set on Date Picker dialog...
int minYear1 = 2000;
int minMonth1 = 0;//0-january , 1-february , 2-march..
int minDay1 =1;
int minYear = minYear1;
int minMonth = minMonth1;
int minDay = minDay1;
//these are the minimum dates to set Datepicker..
private int year;
private int month;
private int day;
public String dateOutput=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);
setCurrentDateOnView();
Button pickDate = (Button) findViewById(R.id.btnChangeDate);
pickDate.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showDialog(DATE_DIALOG_ID);
}
});
}
// display current date
public void setCurrentDateOnView() {
System.out.println("----------setCurrentDateOnView()-----------");
tvDisplayDate = (TextView) findViewById(R.id.tvDate);
dpResult = (DatePicker) findViewById(R.id.dpResult);
final Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
// set current date into textview
tvDisplayDate.setText(new StringBuilder()
// Month is 0 based, just add 1
.append(month + 1).append("-").append(day).append("-")
.append(year).append(" "));
// set current date into datepicker
dpResult.init(year, month, day, null);
}
//this was the main part in program to Restrict the DatePicker Dialog to only its current date.
@Override
protected Dialog onCreateDialog(int id) {
System.out.println("----------onCreateDialog()-----------");
DatePickerDialog _date = null;
switch (id) {
case DATE_DIALOG_ID:
_date = new DatePickerDialog(this, datePickerListener,
year, mMonth, mDay){
@Override
public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
{
System.out.println("----------onDateChanged()-----------"+mYear+"--"+year);
System.out.println("----------onDateChanged()-----------"+mMonth+"--"+monthOfYear);
System.out.println("----------onDateChanged()-----------"+mDay+"--"+dayOfMonth);
// These lines of commented code used for only setting the maximum date on Date Picker..
if (year > mYear && year)
view.updateDate(mYear, mMonth, mDay);
if (monthOfYear > mMonth && year == mYear)
view.updateDate(mYear, mMonth, mDay);
if (dayOfMonth > mDay && year == mYear && monthOfYear == mMonth)
view.updateDate(mYear, mMonth, mDay);
/* //these below lines of code used for setting the maximum as well as minimum dates on Date Picker Dialog..
if (year < minYear)
view.updateDate(minYear, minMonth, minDay);
if (monthOfYear < minMonth && year == minYear )
view.updateDate(minYear, minMonth, minDay);
if (dayOfMonth < minDay && year == minYear && monthOfYear == minMonth)
view.updateDate(minYear, minMonth, minDay);
if (year > mYear)
view.updateDate(mYear, mMonth, mDay);
if (monthOfYear > mMonth && year == mYear)
view.updateDate(mYear, mMonth, mDay);
if (dayOfMonth > mDay && year == mYear && monthOfYear == mMonth)
view.updateDate(mYear, mMonth, mDay);
*/
dateOutput = String.format("Date Selected: %02d/%02d/%04d",
dayOfMonth, monthOfYear+1, year);
// Log.d("Debug", dateOutput);
Toast.makeText(MainActivity.this,dateOutput, Toast.LENGTH_SHORT).show();
}
};
}
return _date;
}
private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() {
// when dialog box is closed, below method will be called.
public void onDateSet(DatePicker view, int selectedYear,
int selectedMonth, int selectedDay) {
System.out.println("----------onDateSet()-----------");
year = selectedYear;
month = selectedMonth;
day = selectedDay;
// set selected date into textview
tvDisplayDate.setText(new StringBuilder().append(month + 1).append("-").append(day).append("-").append(year).append(" "));
// set selected date into datepicker also
dpResult.init(year, month, day, null);
}
};
}
你嘗試用'datePickerDialog.getDatePicker()setMaxDate(System.currentTimeMillis的());'。 ? – 2014-10-07 06:37:25
未來日期是指從當前日期開始的日期對嗎? – SathishKumar 2014-10-07 06:37:26