【问题标题】:How to Hide Past dates and restrict user to select future dates only如何隐藏过去的日期并限制用户只选择未来的日期
【发布时间】:2014-09-17 11:51:19
【问题描述】:

如何在 DatePicker 对话框中隐藏过去的日期?我不想让用户选择过去的日期

最好的方法是什么?如果我想限制用户只选择未来的日期!

    @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;
     }

}

【问题讨论】:

  • 为什么是赏金?你不喜欢 setMinDate 方法吗?
  • 看看seMinDate方法。
  • setMinDate() 应该足够了。您可以使用setMinDate(new Date()),最短日期为今天

标签: android android-datepicker


【解决方案1】:

您必须使用setMinDate 作为最短日期,如果您想设置最长日期,也可以使用setMaxDate。

这是SetMinDate 的示例代码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】:

    您可以使用setMinDate (long minDate) 来实现您的目标。文档说:

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

    【讨论】:

      【解决方案3】:

      你可以在你的 switch case 中试试这个代码

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

      myDateListener 在哪里跟随代码

      私有 DatePickerDialog.OnDateSetListener myDateListener = new DatePickerDialog.OnDateSetListener() {

          @Override
          public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {
      
              showDate(arg1, arg2 + 1, arg3);
          }
      };
      

      而showDate()是在textView中显示日期的方法 这是 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);
      }
      

      希望对你有帮助:)

      【讨论】:

        【解决方案4】:

        一行代码就可以解决:

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

        这样,日期选择器将只显示从当前时间开始的日期。

        Reference.

        【讨论】:

          【解决方案5】:
          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...");
          }
          

          希望对你有帮助:)

          【讨论】:

            猜你喜欢
            • 2014-08-18
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-11-26
            • 1970-01-01
            • 1970-01-01
            • 2015-10-14
            • 1970-01-01
            相关资源
            最近更新 更多