如何在DatePickerDialog Android的今天date之前禁用date?

我想在DatePickerDialog的今天date之前禁用date。我是新的android中,请build议我,我怎么能这样做。这里是我的代码,我已经写了DatePickerDialog

final DatePickerDialog.OnDateSetListener date = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { // TODO Auto-generated method stub myCalendar.set(Calendar.YEAR, year); myCalendar.set(Calendar.MONTH, monthOfYear); myCalendar.set(Calendar.DAY_OF_MONTH, dayOfMonth); updateLabel(val); } }; depart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub new DatePickerDialog(this, date, myCalendar .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)).show(); val=1; } }); returnDate.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub new DatePickerDialog(this, date, myCalendar .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)).show(); val=2; } }); private void updateLabel(int val) { String myFormat = "dd/MM/yy"; //In which you need put here SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.US); Log.d("Date vlue ", "==="+sdf.format(myCalendar.getTime())); if(val==1) depart.setText(sdf.format(myCalendar.getTime())); else returnDate.setText(sdf.format(myCalendar.getTime())); } 

请build议我该怎么做

Solutions Collecting From Web of "如何在DatePickerDialog Android的今天date之前禁用date?"

看到这个例子..!

 import java.util.Calendar; import android.app.Activity; import android.app.DatePickerDialog; import android.app.Dialog; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.DatePicker; import android.widget.TextView; public class MyAndroidAppActivity extends Activity { private TextView tvDisplayDate; private Button btnChangeDate; private int myear; private int mmonth; private int mday; static final int DATE_DIALOG_ID = 999; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); setCurrentDateOnView(); addListenerOnButton(); } // display current date public void setCurrentDateOnView() { tvDisplayDate = (TextView) findViewById(R.id.tvDate); final Calendar c = Calendar.getInstance(); myear = c.get(Calendar.YEAR); mmonth = c.get(Calendar.MONTH); mday = c.get(Calendar.DAY_OF_MONTH); // set current date into textview tvDisplayDate.setText(new StringBuilder() // Month is 0 based, just add 1 .append(mmonth + 1).append("-").append(mday).append("-") .append(myear).append(" ")); } public void addListenerOnButton() { btnChangeDate = (Button) findViewById(R.id.btnChangeDate); btnChangeDate.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { showDialog(DATE_DIALOG_ID); } }); } @Override protected Dialog onCreateDialog(int id) { switch (id) { case DATE_DIALOG_ID: // set date picker as current date DatePickerDialog _date = new DatePickerDialog(this, datePickerListener, myear,mmonth, mday){ @Override public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 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); } }; return _date; } return null; } 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) { myear = selectedYear; mmonth = selectedMonth; mday = selectedDay; // set selected date into textview tvDisplayDate.setText(new StringBuilder().append(mmonth + 1) .append("-").append(mday).append("-").append(myear) .append(" ")); } }; } 

main.xml中

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <Button android:id="@+id/btnChangeDate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Change Date" /> <TextView android:id="@+id/lblDate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Current Date (MD-YYYY): " android:textAppearance="?android:attr/textAppearanceLarge" /> <TextView android:id="@+id/tvDate" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="" android:textAppearance="?android:attr/textAppearanceLarge" /> </LinearLayout> 

使用getDatePicker()方法获取DatePickerDialog中使用的DatePicker,并使用setMinDate(Long millis)方法。

传递给它你必须设置的最小date(从Epoch毫秒)。

所以你可以做类似的事情

 SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); Date d = sdf.parse("21/12/2012"); DatePicker datePicker = date.getDatePicker(); datePicker.setMinDate(d.getTime()); 

编辑:

好吧,所以当你创buildDatePickerDialog时,在显示之前,只要将它保存到一个variables中,设置最小date,然后显示它。

 DatePickerDialog dpd = new DatePickerDialog(IweenFlightSearch.this, date, myCalendar.get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)); SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy"); Date d = sdf.parse("21/12/2012"); dpd.getDatePicker().setMinDate(d.getTime()); dpd.show(); 

这应该工作。

我知道这太晚了。 但希望这会有所帮助。 使用

 date .getDatePicker().setMinDate(System.currentTimeMillis() - 1000); 

在你的情况下date是DatePickerDialog

干杯!

//创build一个DatePickerDialog的新实例并返回它

  DatePickerDialog datePickerDialog = new DatePickerDialog(getActivity(), this,year,month,day); datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis()); return datePickerDialog; 

我得到的解决scheme.hope它将有助于某人静态final int DATE_DIALOG_ID = 999;

 depart.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub showDialog(DATE_DIALOG_ID); } }); protected Dialog onCreateDialog(int id) { final Calendar now = Calendar.getInstance(); switch (id) { case DATE_DIALOG_ID: // set date picker as current date DatePickerDialog _date = new DatePickerDialog(this, date,myCalendar .get(Calendar.YEAR), myCalendar.get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)){ @Override public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { if (year < now.get(Calendar.YEAR)) view.updateDate(myCalendar .get(Calendar.YEAR), myCalendar .get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)); if (monthOfYear < now.get(Calendar.MONTH) && year == now.get(Calendar.YEAR)) view.updateDate(myCalendar .get(Calendar.YEAR), myCalendar .get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)); if (dayOfMonth < now.get(Calendar.DAY_OF_MONTH) && year == now.get(Calendar.YEAR) && monthOfYear == now.get(Calendar.MONTH)) view.updateDate(myCalendar .get(Calendar.YEAR), myCalendar .get(Calendar.MONTH), myCalendar.get(Calendar.DAY_OF_MONTH)); } }; return _date; } return null; }