关于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();
            }
        });

需要注意的就是这两点。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM