2010-03-26 4 views
11

Я использую datePicker в android для отображения изображений на основе выбранных пользователем дат. Мне нужно ограничить указанные даты на определенные дни, например, с 1 января 2010 года по 31 декабря 2010 года. Простой, как я думал, но нет, где я могу найти ответ о том, как ограничить эти даты.Установить ограничения даты дат для android date

Кто-нибудь знает, как ограничить даты для Android DatePicker

+1

мне удалось установить программно мин, макс выбираемые даты, и также установить текущую (по умолчанию) дату DatePicker Вид: http://stackoverflow.com/ Вопросы/6421874/how-to-get-the-date-set-in-the-datepicker-widget-in-android/7961268 # 7961268 –

ответ

0

Я думаю, вы должны реализовать свой собственный DatePicker. Логикой этого было бы следующее: «Только немногие разработчики когда-либо ограничивали бы DatePicker, поэтому им придется реализовать свою функциональность».

+1

Также для XML есть некоторые дополнительные свойства, доступные как endYear beginYear, вы можете использовать это для границы. – Pentium10

+0

Где я могу найти информацию на endYear beginYear, похоже, что это будет работать очень красиво. Я боялся ответа реализовать свои собственные, надеюсь, что эти свойства xml выйдут. – matt

+0

endYear и beginYear bounds работают только с виджетами, а не с диалогом datePicker, который я использую. Я посмотрю, как реализовать виджет вместо этого, если никто не может предложить информацию о том, как применять границы к диалогу. – matt

1

Возможно, слишком поздно ответить, но установить min и max на DatePickerDialog. Работает для всех версий Android. Просто вам нужно возвратить DatePickerDialog на основе 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

Почему вы не должны разработать новую схему, как DatePicker с customoption. Вы можете делать со Спиннерами и Форлопом.

7

Вы можете просто установить:

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

и

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

где dateDialog является

new DatePickerDialog() 

и парам типа установить для MaxDate и MinDate является long

+0

Работает только с версиями позже Android 11. –

+0

для api <11 попробуйте этот http://stackoverflow.com/а/32943731/3758898 –

0

U можно достичь, введя простую линию

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