【问题标题】:Cannot Set Min and Max for Datpicker in Java Android无法在 Java Android 中为 Datepicker 设置最小值和最大值
【发布时间】:2014-02-26 17:24:52
【问题描述】:

卡在如何使用 DatePicker 设置最小和最大日期,例如,用户无法设置超过当前日期的日期。同样,用户将无法选择 1960 年之前的日期,到目前为止,我已经能够设置 DatePicker,我的代码如下:

 public class MainActivity extends FragmentActivity {

        EditText mEdit;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
        }

        public void selectDate(View view) {
            DialogFragment newFragment = new SelectDateFragment();
            newFragment.show(getSupportFragmentManager(), "DatePicker");
        }
        public void populateSetDate(int year, int month, int day) {
            mEdit = (EditText)findViewById(R.id.editText1);
            mEdit.setText(month+"/"+day+"/"+year);
        }
        public class SelectDateFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {
            @Override
            public Dialog onCreateDialog(Bundle savedInstanceState) {
                final Calendar calendar = Calendar.getInstance();
                int yy = calendar.get(Calendar.YEAR);
                int mm = calendar.get(Calendar.MONTH);
                int dd = calendar.get(Calendar.DAY_OF_MONTH);
                return new DatePickerDialog(getActivity(), this, yy, mm, dd);
            }

            public void onDateSet(DatePicker view, int yy, int mm, int dd) {
                populateSetDate(yy, mm+1, dd);
            }
        }

    }

【问题讨论】:

    标签: java android date datepicker


    【解决方案1】:

    你可以试试下面的方法。

    public class DatePickerDialogWithMaxMinRange extends DatePickerDialog {
    
     static int maxYear=2014;  // max date which you want to set
     static int maxMonth=11;
     static int maxDay=31;
    
     int minYear=1960;        // min date which you want to set
     int minMonth=0;
     int minDay=1;
    
    
    public DatePickerDialogWithMaxMinRange(Context context,  OnDateSetListener callBack,int minYear,int minMonth,int minDay,int maxYear,int maxMonth,int maxDay) {
        super(context,callBack, maxYear, maxMonth, maxDay);
        this.minDay = minDay;
        this.minMonth = minMonth;
        this.minYear = minYear;
        DatePickerDialogWithMaxMinRange.maxDay = maxDay;
        DatePickerDialogWithMaxMinRange.maxMonth = maxMonth;
        DatePickerDialogWithMaxMinRange.maxYear = maxYear;
    }
    
    @Override
    public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
        super.onDateChanged(view, year, monthOfYear, dayOfMonth);
    
            if (year > maxYear ||monthOfYear > maxMonth && year == maxYear||
                     dayOfMonth > maxDay && year == maxYear && monthOfYear == maxMonth){
                view.updateDate(maxYear, maxMonth, maxDay);
                }else if(year < minYear ||monthOfYear < minMonth && year == minYear||
                     dayOfMonth < minDay && year == minYear && monthOfYear == minMonth){
                 view.updateDate(minYear, minMonth, minDay );
                }
         }
    }
    

    【讨论】:

      【解决方案2】:

      在 DatePickerDialog 中有两种设置 min 和 ma​​x date 的方法,其中 input time 为 毫秒

      Min Date of Picker

      Max Date of Picker

      所以代码会是这样的

      DatePickerDialog d = new DatePickerDialog(getActivity(), this, yy, mm, dd);
      DatePicker dp = d.getDatePicker();
      dp.setMaxDate(maxDate);
      dp.setMinDate(minDate);
      return d;
      

      但此方法在 API 级别 11 中可用。

      【讨论】:

        猜你喜欢
        • 2016-03-19
        • 1970-01-01
        • 1970-01-01
        • 2014-01-15
        • 2019-04-18
        • 1970-01-01
        • 2020-06-29
        • 2013-03-11
        • 1970-01-01
        相关资源
        最近更新 更多