【问题标题】:Android Disable past dates in datepickerAndroid 在日期选择器中禁用过去的日期
【发布时间】:2011-01-07 11:25:41
【问题描述】:

我需要在日期选择器控件中禁用过去的日期。这个控件在一个对话框中打开,我想禁用过去的日期,以便在选择过去的日期时抛出错误。

【问题讨论】:

    标签: android


    【解决方案1】:

    我想您正在使用 DatePickerDialog 并且您必须传递给构造函数的 OnDateSetListener 不符合您的需求,因为您必须在实际设置日期之前 抛出错误.

    在这种情况下,您可以扩展 DatePickerDialog 并自己实现 OnDateChanged,每次日期更改时都会调用它,并且您将 DatePicker 以及新的年、月和日值作为参数,因此您可以检查如果该日期已过并且在这种情况下抛出错误(使用 Toast 或其他)并调用 DatePicker.updateDate() 设置正确的值(以便 DatePicker 始终处于一致状态)。

    另外,您可以调用DatePicker.init(year, monthOfYear, dayOfMonth, onDateChangedListener);,然后您可以传递onDateChangedListener 实现,而无需扩展 DatePickerDialog

    【讨论】:

      【解决方案2】:

      您可以手动检查日期.. 并限制用户输入无效日期:

      检查以下代码sn-p:

           if((futureDate.getDate() == currentDate1.getDate() && futureDate.getMonth()== currentDate1.getMonth() && futureDate.getYear() == currentDate1.getYear()))
                    {
                        if(futureDate.after(currentDate1))
                        {
                                         // Accept Date
                        }
                        else
                        {
                                        // Alert user Date is Invalid
                        }
      
                    }
                    else
                    {
                               // Alert user Date is Invalid
                    }
      

      【讨论】:

        【解决方案3】:

        如果您正在运行 API 11 或更高版本,请在 DatePicker 上使用 setMinDate() 方法。这会隐藏指定日期之前的所有日期。

        【讨论】:

        • 那么 setMinDate() 不只是将 DatePicker 上的过去日期变灰吗?但用户仍然可以选择过去的日期。有没有办法真正禁用过去日期的选择?
        【解决方案4】:

        希望这会有所帮助。

        public void openDateDialog(View view) { 最终日历 c = Calendar.getInstance(); 最终 int dayOfMonth = c.get(Calendar.DAY_OF_MONTH); final int monthOfYear = c.get(Calendar.MONTH); final int year = c.get(Calendar.YEAR);

        new MyDatePickerDialog(view.getContext(), null, year, monthOfYear, dayOfMonth).show();;
        

        }

         class MyDatePickerDialog extends DatePickerDialog {
        
        
                public MyDatePickerDialog(Context context, OnDateSetListener callBack,
                        int year, int monthOfYear, int dayOfMonth) {
                    super(context, callBack, year, monthOfYear, dayOfMonth);
                    this.context = context;
                }
        
        
                private Context context;
        
        
        
                @Override
                public void onDateChanged(DatePicker view, int year, int month, int day) {
                    // TODO Auto-generated method stub
                    super.onDateChanged(view, year, month, day);
                      Calendar dareSelected = Calendar.getInstance();
                        dareSelected.set(year, month, day);
                        Calendar currentDate = Calendar.getInstance();
        
                       int a = dareSelected.compareTo(currentDate);
                       if(a<0){
                           Toast.makeText(context, "Invalid Date", Toast.LENGTH_SHORT).show();
                       }else{
                           setDate(year,month,day);
                       }
                }
            }
        
            private void setDate(int year, int monthOfYear, int dayOfMonth){
                tvText.setText(new StringBuilder().append(pad(dayOfMonth))
                        .append("-").append(pad(monthOfYear + 1)).append("-")
                        .append(pad(year)));
        
            }
        
            private static String pad(int c) {
                if (c >= 10)
                    return String.valueOf(c);
                else
                    return "0" + String.valueOf(c);
            }
        

        【讨论】:

          猜你喜欢
          • 2021-04-15
          • 1970-01-01
          • 2016-07-03
          • 2013-03-23
          • 2018-10-16
          • 2017-05-12
          • 2017-03-02
          • 2015-11-01
          • 2019-11-29
          相关资源
          最近更新 更多