2015-02-11 87 views
17

我正在使用AppCompat v21針對並構建API級別21。能夠在日期選擇器中設置最大日期時選擇未來日期

它給了我一個很好的尋找新的日期選擇器,其允許在max date已經使用

datePicker.setMaxDate(Calendar.getInstance().getTimeInMillis()) 

將來的日期顯示爲灰色,讓我選擇一個將來的日期的預想不到的特性,但我可以仍然選擇其中任何一個。這是一個錯誤?我做錯了嗎?有沒有辦法阻止用戶在日期選擇器中選擇未來的日期?

舊的Holo日期選擇器在設置最大日期時不允許選擇未來日期。

UPDATE:

雖然它不是我的Nexus 4運行股票5.0正常工作,這是對我的Nexus 6運行普通的Android 5.1.1正常工作。也許這是Android 5.0中的一個bug,它在5.1中被修復了?有人可以確認嗎?

回答

21

因此,要回答我自己問題:

我已經在grepcode上查看了DatePickerCalendarDelegate.java的Android源代碼,特別是在public void setMaxDate(long maxDate)上,Android版本5.05.1

什麼在setMaxDate() 5.1的新功能是

mDayPickerView.goTo(getSelectedDay(), false, true, true);

已更改爲:

mDayPickerView.setMaxDate(maxDate);

他們似乎固定在那兒,這與我的觀察,它的工作原理相當於如5.1所預期的那樣,但不在5.0。

因此,似乎我們堅持處理它在Android 5.0中無法正常工作的事實(最大日期之後的幾天灰色,但仍然可以選擇)。

+0

那麼我們該怎麼做? – 2016-03-25 13:43:05

+0

我所做的只是忽略選定的日期,如果用戶在將來選擇日期並顯示錯誤消息(快餐欄或烤麪包)。另一種解決方案也可以使用另一個日期選擇器,也許https://github.com/wdullaer/MaterialDateTimePicker – 2016-03-25 14:50:02

+0

在onDateSet()我們可以把這樣的檢查 Calendar calendar = Calendar.getInstance(); calendar.set(year,monthOfYear,dayOfMonth); Calendar calendar1 = Calendar.getInstance(); (calendar.getTime())){ Toast.makeToast(getApplicationContext,「Please select a valid date,Toast.LENGTH_LONG).show(); return; } – ashutiwari4 2016-07-14 06:52:02

-1

您可以使用一種方法,在該方法中,您可以傳遞用戶輸入的日期的值,並將其與例如當前日期進行比較,如果是未來日期,您可以重置用於特定日期的日期值(例如當前日期),並通知敬酒者。

+1

謝謝,我意識到我可以做到這一點,但之前我沒有這樣做(與舊的日期選擇器),我覺得現在我不得不這樣做。我想知道是否可以讓日期選擇器不允許選擇未來的日期(如果不是,我想知道Android團隊是否有意或者是否有bug) – 2015-02-11 16:38:50

2

我使用這個和它的正常工作

調用此函數打開日期選擇器

public void openDatePicker() { 
     DatePickerDialog dpd = new DatePickerDialog(this, mDateSetListener, mYear, mMonth, mDay); 
     dpd.getDatePicker().setMaxDate(System.currentTimeMillis()); 
     dpd.show(); 
    } 

這裏是mDateSetListener

private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() { 
     @Override 
     public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { 
      mYear = year; 
      mMonth = monthOfYear; 
      mDay = dayOfMonth; 
      date.setText(dayOfMonth + "/" + (monthOfYear + 1) + "/" + year); // Here date is a TextView to display date 
      date.setVisibility(View.VISIBLE); 
     } 
    }; 
+0

感謝分享!我已經更新了我的問題。 – 2015-07-24 12:50:31

相關問題