2010-03-26 13 views
11

Tôi đang sử dụng datePicker trong android để hiển thị hình ảnh dựa trên ngày được người dùng chọn. Tôi cần giới hạn những ngày đã nói vào những ngày nhất định, ví dụ từ ngày 1 tháng 1 năm 2010 đến ngày 31 tháng 12 năm 2010. Đơn giản như tôi nghĩ nhưng không có nơi nào tôi có thể tìm thấy câu trả lời về cách giới hạn những ngày này.Đặt giới hạn ngày của ngày trong ngày cho android

Có ai biết làm thế nào để hạn chế số ngày dành cho Android DatePicker

+1

Tôi quản lý để lập trình ngày tối thiểu, có thể chọn tối đa & cũng đặt ngày hiện tại (mặc định) cho Chế độ xem DatePicker: http://stackoverflow.com/ question/6421874/how-to-get-the-date-set-in-the-datepicker-widget-in-android/7961268 # 7961268 –

Trả lời

0

Tôi đoán bạn phải thực hiện riêng DatePicker của bạn. Logic đằng sau điều này sẽ là: "Chỉ một vài nhà phát triển sẽ bao giờ giới hạn DatePicker để họ phải triển khai chức năng themselfs."

+1

Cũng cho XML có một số thuộc tính bổ sung có sẵn như endYear beginYear, bạn có thể sử dụng nó cho giới hạn. – Pentium10

+0

nơi tôi sẽ tìm thấy thông tin vào cuốiYăm bắt đầu, âm thanh như vậy sẽ hoạt động khá độc đáo. Tôi sợ câu trả lời thực hiện của riêng tôi, hy vọng rằng thuộc tính xml này sẽ mở rộng. – matt

+0

endYear và beginYear bounds chỉ hoạt động với widget không phải là hộp thoại datePicker thực tế mà tôi đang sử dụng. Tôi sẽ xem xét để xem cách triển khai tiện ích thay thế, trừ khi mọi người có thể cung cấp thông tin về cách áp dụng giới hạn cho hộp thoại – matt

1

Có thể đã quá muộn để trả lời, nhưng bạn có thể dễ dàng đặt ngày minmax cho DatePickerDialog. Hoạt động cho tất cả các phiên bản Android. Chỉ cần bạn cần trả lại số DatePickerDialog dựa trên phiên bản 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

Tại sao bạn không nên thiết kế bố cục mới như DatePicker với tùy chỉnh. Bạn có thể làm với Spinners và Forloops.

7

Bạn chỉ có thể thiết lập:

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

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

nơi dateDialog là một

new DatePickerDialog() 

và param loại đặt cho MaxDate và MinDate là một long

+0

Chỉ hoạt động với các phiên bản sau Android 11. –

+0

cho api <11 thử http://stackoverflow.com này/a/32943731/3758898 –

0

U có thể đạt được điều này bằng cách nhập một dòng đơn giản

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