2010-03-26 16 views
11

Estoy usando datePicker en android para mostrar imágenes basadas en las fechas seleccionadas por el usuario. Necesito limitar dichas fechas a ciertos días, por ejemplo, el 1 de enero de 2010 al 31 de diciembre de 2010. Tan simple como eso pensé, pero en ningún lugar puedo encontrar la respuesta sobre cómo limitar estas fechas.Establecer los límites de fecha del datepicker de android

¿Alguien sabe cómo limitar las fechas para Android DatePicker

+1

logré establecer mediante programación los valores mínimo, máximo fechas seleccionables, y también ajustar la fecha actual (por defecto) para el DatePicker Vista: http://stackoverflow.com/ questions/6421874/how-to-get-the-date-set-in-the-datepicker-widget-in-android/7961268 # 7961268 –

Respuesta

0

supongo que tiene que implementar su propio DatePicker. La lógica detrás de esto sería: "Solo unos pocos desarrolladores alguna vez limitarían el DatePicker por lo que tienen que implementar la funcionalidad ellos mismos".

+1

También para XML hay algunas propiedades adicionales disponibles como endYear beginYear, puede usar eso para límites. – Pentium10

+0

donde encontraría la información sobre el final del año al principio del año, parece que funcionaría muy bien. Tenía miedo de la respuesta de implementar la mía, con suerte estas propiedades xml funcionarán. – matt

+0

los límites endYear y beginYear solo funcionan con widgets, no el diálogo datePicker real que estoy usando. Veré cómo implementar el widget, a menos que cualquiera pueda ofrecer información sobre cómo aplicar límites al diálogo – matt

1

Podría ser demasiado tarde para responder, pero es fácil establecer la fecha min y max para DatePickerDialog. Funciona para todas las versiones de Android. Simplemente tiene que devolver el DatePickerDialog basado en la versión

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

Android Por qué no debe diseñar nuevo diseño como DatePicker con customoption. Puedes hacerlo con Spinners y Forloops.

7

simplemente puede establecer:

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

y

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

donde dateDialog es un

new DatePickerDialog() 

y el parámetro Tipo de establecer para MaxDate y MinDate es una long

+0

Solo funciona con versiones posteriores a Android 11. –

+0

para api <11 intente esto http://stackoverflow.com/a/32943731/3758898 –

0

U puede lograr esto escribiendo una simple línea

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