关于DatePicker设置MinDate和MaxDate的几个坑

好久没写了,格式什么的先算了

最近搞安卓app,需要使用到选择日期的控件,首先使用了DatePickerDialog,继承自AlertDialog,内部使用了DatePicker。
如果需要修改样式的话就不是很方便了,可以自己派生一个DatePickerDialog的子类,再使用AlertDialog的方法设置样式。
不过比较灵活且更兼容API Level 11之前平台的方法是产生一个AlertDialog,通过Bulider来调整样式,使用SetView将一个DatePicker设为View。

  mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mCalendar = Calendar.getInstance();
                final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
                final DatePicker dp = new DatePicker(getActivity());
                dp.setCalendarViewShown(false);//注意:如果使用了setMaxDate必须关掉CalenderView,否则会报错"FATAL EXCEPTION: main java.lang.NullPointerException",
                long mindate = System.currentTimeMillis() - 1000L;  //注意:如果不提前一秒的话会报错"java.lang.IllegalArgumentException: fromDate: XXX does not precede toDate: XXX"
                long maxdate = mindate + 7 * 24 * 3600 * 1000L; //设置DatePicker范围,从今天起之后一周
                dp.setMinDate(mindate);
                dp.setMaxDate(maxdate);
                builder.setView(dp);
                builder.setTitle(getString(R.string.pls_select_date));
                builder.setPositiveButton(getString(R.string.set), new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
//                       TODO: Dispatch listener to Activity
                        String new_text = (dp.getMonth() + 1) + getString(R.string.month) + dp.getDayOfMonth() + getString(R.string.day);
                        mButton.setText(new_text); //可以设置日期之后修改Button文字之类的。
                    }
                });
                builder.setNegativeButton(getString(R.string.cancel), null);
                builder.show();
            }
        });

需要注意的就是这两点。

posted on 2015-09-19 18:59  UBless  阅读(3421)  评论(0编辑  收藏  举报

导航