Как отключить даты до сегодняшнего дня в DatePickerDialog Android?

Я хочу отключить даты до сегодняшнего дня в DatePickerDialog. Я новичок в android, пожалуйста, предложите мне, как я могу это сделать. Вот мой код, который я написал для 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())); } 

Пожалуйста, предложите мне, что нужно сделать

Solutions Collecting From Web of "Как отключить даты до сегодняшнего дня в DatePickerDialog Android?"

См. Этот пример ..!

 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> 

Получите DatePicker, используемый в вашем DatePickerDialog, с помощью метода getDatePicker () и используйте метод setMinDate (Long millis) .

Передайте ему минимальную дату (в миллисекундах от Epoch), которую вы должны установить.

Таким образом, вы можете сделать что-то вроде

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

РЕДАКТИРОВАТЬ:

Хорошо, поэтому, когда вы создаете свой DatePickerDialog, прежде чем показывать его, просто сохраните его в переменной, установите минимальную дату и затем покажите ее.

 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); 

В вашем случае дата DatePickerDialog

Ура!

// Создаем новый экземпляр DatePickerDialog и возвращаем его

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

Я получил решение. Надеюсь, это поможет кому-то статическому окончательному 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; }