2014-09-17 20 views
16

Làm cách nào để ẩn các ngày trong quá khứ trên hộp thoại DatePicker? Tôi không muốn cho phép người dùng chọn các ngày trong quá khứCách ẩn các ngày trong quá khứ và hạn chế người dùng chỉ chọn những ngày trong tương lai

Cách tốt nhất là gì? nếu tôi muốn hạn chế người dùng chỉ chọn ngày trong tương lai!

@Override 
    public void onCreate(Bundle savedInstanceState) 
    { 
     ................................................. 
     editDate.setOnClickListener(new View.OnClickListener() { 

      @SuppressWarnings("deprecation") 
      @Override 
      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       showDialog(DIALOG_DATE); 
      } 
     }); 

    } 

    @Override 
     protected Dialog onCreateDialog(int id) { 
      switch (id) { 
      case DIALOG_DATE: 
       return new DatePickerDialog(this, new OnDateSetListener() { 

        @Override 
        public void onDateSet(DatePicker view, int year, 
          int monthOfYear, int dayOfMonth) { 
         dateTime.set(year, monthOfYear, dayOfMonth); 
         editDate.setText(dateFormatter 
           .format(dateTime.getTime())); 
        } 
       }, dateTime.get(Calendar.YEAR), 
        dateTime.get(Calendar.MONTH), 
        dateTime.get(Calendar.DAY_OF_MONTH)); 
      } 
      return null; 
    } 

} 
+0

Tại sao lại là tiền thưởng? Bạn không thích phương thức setMinDate? –

+0

có giao diện cho phương thức [seMinDate] (http://stackoverflow.com/a/20813342/2591002). –

+0

'setMinDate()' là đủ. Bạn có thể sử dụng 'setMinDate (new Date())' và ngày tối thiểu sẽ là ngày hôm nay –

Trả lời

8

Bạn có thể sử dụng setMinDate (long minDate) để đạt được mục tiêu của mình. Doc nói:

Sets the minimal date supported by this NumberPicker in milliseconds since January 1, 1970 00:00:00 in getDefault() time zone. 
13

Bạn phải sử dụng setMinDate cho ngày tối thiểu và bạn cũng có thể sử dụng setMaxDate nếu bạn muốn thiết lập ngày tối đa.

Đây là mã mẫu cho SetMinDate cho DatePickerDialog.

@Override 
protected Dialog onCreateDialog(int id) { 
     switch (id) { 
     case DIALOG_DATE: 

      DatePickerDialog mDatePickerDialog = new DatePickerDialog(this, new OnDateSetListener() { 

       @Override 
       public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
        dateTime.set(year, monthOfYear, dayOfMonth); 
        editDate.setText(dateFormatter.format(dateTime.getTime())); 
       } 
      }, dateTime.get(Calendar.YEAR), dateTime.get(Calendar.MONTH), dateTime.get(Calendar.DAY_OF_MONTH)); 
      Calendar mCalendarMinimum = Calendar.getInstance(); 
      mCalendarMinimum.add(Calendar.HOUR, -1); 
      mDatePickerDialog.getDatePicker().setMinDate(mCalendarMinimum.getTimeInMillis()); 
      return mDatePickerDialog; 
     } 
     return null; 
    } 
2

U có thể thử mã này trong trường hợp chuyển đổi của bạn

DatePickerDialog dpd = new DatePickerDialog(AddTaskActivity.this, 
        myDateListener, year, month, day); 
      dpd.getDatePicker().setCalendarViewShown(false); 
      dpd.show(); 

đâu myDateListener được mã sau

tin DatePickerDialog.OnDateSetListener myDateListener = new DatePickerDialog.OnDateSetListener() {

@Override 
    public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) { 

     showDate(arg1, arg2 + 1, arg3); 
    } 
}; 

và showDate() là phương thức hiển thị ngày trong TextView Đây là mã cho showDate()

public void showDate(int year, int month, int day) { 

    String day1 = String.valueOf(day); 
    String month1 = String.valueOf(month); 



    String s2 = day1 + "/" + month1 + "/" + year; 

    Log.e("date", s2); 
    Cal.setText(s2); 
} 

Hy vọng nó sẽ giúp bạn :)

0
this.calendar = new GregorianCalendar(); 
this.datePicker = (DatePicker) findViewById(R.id.xxxxx); 

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { 
    // (picker is a DatePicker) 
    this.datePicker.setMinDate(this.calendar.getTimeInMillis()); 
} else { 
    final int minYear = this.calendar.get(Calendar.YEAR); 
    final int minMonth = this.calendar.get(Calendar.MONTH); 
    final int minDay = this.calendar.get(Calendar.DAY_OF_MONTH); 

    this.datePicker.init(minYear, minMonth, minDay, 
      new OnDateChangedListener() { 

       public void onDateChanged(DatePicker view, int year, 
         int month, int day) { 
        Calendar newDate = Calendar.getInstance(); 
        newDate.set(year, month, day); 

        if (calendar.after(newDate)) { 
         view.init(minYear, minMonth, minDay, this); 
        } 
       } 
      }); 
    Log.w(TAG, "API Level < 11 so not restricting date range..."); 
} 

Hy vọng nó sẽ giúp bạn :)

1

Bạn có thể giải quyết nó với một dòng mã:

datePicker.setMinDate(Calendar.getInstance().getTimeInMillis()); 

Bằng cách này, Bộ chọn ngày sẽ chỉ hiển thị ngày từ ti hiện tại tôi và tiến lên.

Reference.

Các vấn đề liên quan