Comment désactiver les dates passées dans le sélecteur de date Android?

Comment désactiver les dates passées dans le sélecteur de date Android?

@Override protected Dialog onCreateDialog(int id) { switch (id) { case DATE_DIALOG_ID: // set date picker as current date return new DatePickerDialog(this, datePickerListener, year, month, day); } return null; } private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() { public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) { year = selectedYear; month = selectedMonth+1; day = selectedDay; startdate.setText(new SsortingngBuilder().append(day).append("-") .append(getMonth(month + 1)).append("-").append(year) .append(" ")); } }; 

Tu peux faire

 datePicker.setMinDate(System.currentTimeMillis() - 1000); 

qui définit la date du jour comme date minimale et toutes les dates passées sont désactivées.

datePicker est un object de DatePicker si vous utilisez un object de DatePickerDialog vous pouvez faire

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

Remarque: setMinDate été introduit dans l’API 11

Cette méthode fonctionnera correctement.

 //Get yesterday's date Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DATE, -1); //Set yesterday time milliseconds as date pickers minimum date DatePickerDialog datePickerDialog = new DatePickerDialog(context, myDateListener, year, month, day); datePickerDialog.getDatePicker().setMinDate(calendar.getTimeInMillis()); datePickerDialog.show(); 

Voici comment je le fais:

 public class DatePickerFragment extends DialogFragment { OnDateSetListener ondateSet; Calendar c; int year = 0, month = 0, day = 0; public DatePickerFragment() { } public void setCallBack(OnDateSetListener ondate) { ondateSet = ondate; } public static DatePickerFragment newInstance(Bundle bundle) { DatePickerFragment myFragment = new DatePickerFragment(); myFragment.setArguments(bundle); return myFragment; } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // final Calendar c = Calendar.getInstance(); //if else for null arguments if (getArguments() != null) { year = getArguments().getInt("year"); month = getArguments().getInt("month"); day = getArguments().getInt("day"); c = Calendar.getInstance(); c.set(year, month, day); } else { c = Calendar.getInstance(); year = c.get(Calendar.YEAR); month = c.get(Calendar.MONTH); day = c.get(Calendar.DAY_OF_MONTH); Log.d("else", "else"); } DatePickerDialog picker = new DatePickerDialog(getActivity(), ondateSet, year, month, day); picker.getDatePicker().setMinDate(c.getTime().getTime()); Log.d("picker timestamp", c.getTime().getTime() + ""); return picker; } } 

Voici comment vous instanciez le sélecteur:

 Bundle bundle = new Bundle(); Calendar c = Calendar.getInstance(); bundle.putInt("year", c.get(Calendar.YEAR)); bundle.putInt("month", c.get(Calendar.MONTH)); bundle.putInt("day", c.get(Calendar.DAY_OF_MONTH)); DatePickerFragment fragment = DatePickerFragment .newInstance(bundle); fragment.setCallBack(dateSet); fragment.show(getActivity().getSupportFragmentManager(), null); 

C’est ma mise en œuvre n’hésitez pas à la changer. Notez que ce code définit mindate comme date de référence par défaut. Aussi la nouvelle instance est importante.

Vous pouvez utiliser cette ligne dans votre code …

 private Calendar cal; private int day; private int month; private int year; static final int DATE_PICKER_ID = 1111; TextView textView; textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { cal = Calendar.getInstance(); day = cal.get(Calendar.DAY_OF_MONTH); month = cal.get(Calendar.MONTH); year = cal.get(Calendar.YEAR); showDialog(DATE_PICKER_ID); } }); @Override protected Dialog onCreateDialog(int id) { switch (id) { case DATE_PICKER_ID: // create a new DatePickerDialog with values you want to show DatePickerDialog datePickerDialog = new DatePickerDialog(this, datePickerListener, year, month, day); Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.DATE, 0); // Add 0 days to Calendar Date newDate = calendar.getTime(); datePickerDialog.getDatePicker().setMinDate(newDate.getTime()-(newDate.getTime()%(24*60*60*1000))); return datePickerDialog; } return null; } private DatePickerDialog.OnDateSetListener datePickerListener = new DatePickerDialog.OnDateSetListener() { // the callback received when the user "sets" the Date in the // DatePickerDialog public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDay) { textViewTime.setText(selectedDay + "/" + (selectedMonth + 1) + "/" + selectedYear); } }; 

Ok, donc j’utilise la bibliothèque MaterialDatePicker et c’est trop simple pour définir la date minimale.

 DatePickerDialog mDatePickerDialog = DatePickerDialog.newInstance(listener, mTime.year, mTime.month, mTime.monthDay); mDatePickerDialog.setYearRange(2016, 2036); Calendar c = Calendar.getInstance(); c.setTimeInMillis(System.currentTimeMillis() - 1000); mDatePickerDialog.setMinDate(c); 

J’ai eu le même problème. Voici comment je l’ai résolu.

Étape 1: Déclarez l’écouteur de clic pour ouvrir le sélecteur de date.

 dateTime.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showDateTimePicker(); } }); 

Étape 2: Déclarez un auditeur qui écoute le changement de date.

  public void showDateTimePicker(){ final Calendar currentDate = Calendar.getInstance(); date = Calendar.getInstance(); DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) { date.set(year, monthOfYear, dayOfMonth); //use this date as per your requirement } }; } 

Etape 3: Nous devons maintenant déclarer un dialog de sélection de date dans la méthode showDateTimePicker () ci-dessus. Nous limiterons également l’access aux dates passées dans cette étape.

  public void showDateTimePicker(){ final Calendar currentDate = Calendar.getInstance(); date = Calendar.getInstance(); DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) { date.set(year, monthOfYear, dayOfMonth); //use this date as per your requirement } }; DatePickerDialog datePickerDialog = new DatePickerDialog(**Your Activity Name.this**, dateSetListener, currentDate.get(Calendar.YEAR), currentDate.get(Calendar.MONTH), currentDate.get(Calendar.DAY_OF_MONTH)); // Limiting access to past dates in the step below: datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000); datePickerDialog.show(); } 

C’est tout ce que vous devez faire. Voici le code final que vous voudrez peut-être regarder:

  private Date date; dateTime.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { showDateTimePicker(); } }); public void showDateTimePicker(){ final Calendar currentDate = Calendar.getInstance(); date = Calendar.getInstance(); DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() { @Override public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) { date.set(year, monthOfYear, dayOfMonth); //use this date as per your requirement } }; DatePickerDialog datePickerDialog = new DatePickerDialog(**Your Activity Name.this**, dateSetListener, currentDate.get(Calendar.YEAR), currentDate.get(Calendar.MONTH), currentDate.get(Calendar.DAY_OF_MONTH)); datePickerDialog.getDatePicker().setMinDate(System.currentTimeMillis() - 1000); datePickerDialog.show(); } 

J’espère que ça aide quelqu’un.

Vous pouvez utiliser la fonction DatePicker # setMinDate () pour définir une date minimale.

  datePickerDialog.getDatePicker().setMinDate(calendar.getTimeInMillis());