2010-03-26 17 views
11

J'utilise datePicker dans android pour afficher les images en fonction des dates sélectionnées par l'utilisateur. J'ai besoin de limiter ces dates à certains jours, par exemple du 1er janvier 2010 au 31 décembre 2010. Simple que je pensais mais pas où puis-je trouver la réponse sur la façon de limiter ces dates.Définir les dates et les dates de l'expéditeur Android

Est-ce que quelqu'un sait comment limiter les dates pour Android DatePicker

+1

J'ai réussi à régler la programatically min, max dates au choix, et également définir la date actuelle (par défaut) pour la DatePicker Vue: http://stackoverflow.com/ questions/6421874/comment-obtenir-la-date-set-dans-le-datepicker-widget-dans-android/7961268 # 7961268 –

Répondre

0

Je suppose que vous devez mettre en œuvre votre propre DatePicker. La logique derrière ceci serait: "Seulement quelques développeurs limiteraient jamais le DatePicker ainsi ils doivent implémenter la fonctionnalité eux-mêmes."

+1

Aussi pour XML il y a quelques propriétés supplémentaires disponibles comme finAnnée beginYear, vous pouvez l'utiliser pour bornes. – Pentium10

+0

où pourrais-je trouver l'information sur la fin de la première année, semble que cela fonctionnerait très bien. J'avais peur que la réponse mette en œuvre la mienne, j'espère que ces propriétés xml vont se déployer. – matt

+0

Les limites endYear et beginYear ne fonctionnent qu'avec le widget et non avec la boîte de dialogue datePicker que j'utilise. Je vais chercher à voir comment implémenter le widget à la place, à moins que n'importe qui peut offrir des informations sur la façon d'appliquer des limites à la boîte de dialogue – matt

1

Il est peut-être trop tard pour répondre, mais il est facile de définir les dates min et max pour DatePickerDialog. Fonctionne pour toutes les versions Android. Il suffit que vous devez retourner le DatePickerDialog basé sur la version Android

protected Dialog onCreateDialog(int id) 
{ 
    switch (id) 
    { 
     case DATE_DIALOG_ID: 
      DatePickerDialog dialog = null; 
      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) 
      { 
       dialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() 
       { 
        @Override 
        public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDate) 
        { 
         mTextView.setText(selectedDate + "/" + selectedMonth + 1 + "/" + selectedYear); 
        } 
       }, year, month - 1, date); 
       Calendar currentDate = Calendar.getInstance(); 
       dialog.getDatePicker().setMaxDate(currentDate.getTimeInMillis()); 
       //If you need you can set min date too 
      } 
      else 
      { 
       dialog = new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() 
       { 
        @Override 
        public void onDateSet(DatePicker view, int selectedYear, int selectedMonth, int selectedDate) 
        { 
         mTextView.setText(selectedDate + "/" + selectedMonth + 1 + "/" + selectedYear); 
        } 
       }, year, month - 1, date) 
       { 
        @Override 
        public void onDateChanged(DatePicker view, int year, int month, int day) 
        { 
         if (year <= maxYear && month + 1 <= maxMonth && date <= maxDate) //meets your criteria 
         { 
          view.updateDate(year, month, date); //update the date picker to selected date 
         } 
         else 
         { 
          view.updateDate(maxYear, maxMonth - 1, maxDate); // or you update the date picker to previously selected date 
         } 
        } 
       }; 
      } 
      return dialog; 
    } 
    return null; 
} 
0

Pourquoi vous ne devriez pas concevoir nouvelle mise en page comme DatePicker avec customoption. Vous pouvez faire avec Spinners et Forloops.

7

Vous pouvez simplement définir:

dateDialog.getDatePicker().setMaxDate(new Date().getTime()); 

et

dateDialog.getDatePicker().setMinDate(new Date().getTime()); 

où dateDialog est un

new DatePickerDialog() 

et le type param à définir pour MaxDate et MinDate est un long

+0

Ne fonctionne qu'avec les versions ultérieures à Android 11. –

+0

pour api <11 Essayez ceci http://stackoverflow.com/a/32943731/3758898 –

0

U peut y parvenir en tapant une simple ligne

mDatePicker.getDatePicker().setMinDate(System.currentTimeMillis()); 
     mcurrentDate.add(Calendar.MONTH,6); 
     mDatePicker.getDatePicker().setMaxDate(mcurrentDate.getTimeInMillis()); 
Questions connexes