设置上下日期限制的日期选择器对话框 [英] Setting upper and lower date limits to date picker dialog

查看:397
本文介绍了设置上下日期限制的日期选择器对话框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经创建了一个活动,其中有用于插入用户的出生日期的场。我已经使用日期选择器来实现这一点。

I have created an activity in which there is a field for inserting birth date of the user. I have used a date picker to achieve this.

这是我在做什么的来源$ C ​​$ C:

This is the source code of what I am doing:

// onclick dob edittext open date picker dialog
        dob.setFocusableInTouchMode(false);
        dob.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View v) {

                //open date picker
                  showDialog(DATE_DIALOG_ID);

            }
        }); 


//======================For picking birth day==========================
    // Creating dialog
        @Override
        protected Dialog onCreateDialog(int id) {
            Calendar c = Calendar.getInstance();
            int cyear = c.get(Calendar.YEAR);
            int cmonth = c.get(Calendar.MONTH);
            int cday = c.get(Calendar.DAY_OF_MONTH);


            switch (id) {
                case DATE_DIALOG_ID:
                    return new DatePickerDialog(this, mDateSetListener, cyear, cmonth, cday);
            }
            return null;
        }
        private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
            // onDateSet method
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
//              String date_selected = String.valueOf(monthOfYear+1)+" /"
//                                    +String.valueOf(dayOfMonth)+" /"
//                                    +String.valueOf(year);

                String date_selected = String.valueOf(dayOfMonth)+" /"
                        +String.valueOf(monthOfYear+1)+" /"
                        +String.valueOf(year);
                //Toast.makeText(RegisterActivity.this, "Selected Date is ="+date_selected, Toast.LENGTH_SHORT).show();
                dob.setText(date_selected);
            }
        };
//======================For picking birth day==========================

现在我想要做的是,要限制日期选择器特定的一年。 像这样的:

Now what I want to do is, to limit the date picker to particular year. Like this:

int maxYear = c.get(Calendar.YEAR) - 15; // this year ( 2013 ) - 15 = 1998
                int maxMonth = c.get(Calendar.MONTH);
                int maxDay = c.get(Calendar.DAY_OF_MONTH);

                int minYear = maxYear-49;
                int minMonth = 0; // january
                int minDay = 25; 

我应该怎么做,设置上述边界的日期选择器?

// ----------------编辑------------------------- -

我做了这样的事情:

//======================For picking birth day==========================
    // Creating dialog
        @Override
        protected Dialog onCreateDialog(int id) {
            Calendar c = Calendar.getInstance();
            maxYear = c.get(Calendar.YEAR) - 15; // this year ( 2013 ) - 15 = 1998
            maxMonth = c.get(Calendar.MONTH);
            maxDay = c.get(Calendar.DAY_OF_MONTH);




            switch (id) {
                case DATE_DIALOG_ID:
                    return new DatePickerDialog(this, mDateSetListener, maxYear, maxMonth, maxDay);
            }
            return null;
        }


        DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {



                int minYear = maxYear-49;
                int minMonth = 0; // january
                int minDay = 25;

            public void onDateChanged(DatePicker view, int year, int monthOfYear,int dayOfMonth) {

                Date current = new Date(year, monthOfYear, dayOfMonth);

                Date minDate = new Date(minYear, minMonth, minDay);
                Date maxDate = new Date(maxYear, maxMonth, maxDay);
                if( current.getTime() < minDate.getTime() )
                {
                    //set to minimum date
                }else if( current.getTime() > maxDate.getTime() )
                {
                    //Set to max Date
                }

            }

            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear,
                    int dayOfMonth) {
                // TODO Auto-generated method stub
                 String date_selected = String.valueOf(dayOfMonth)+" /"
                            +String.valueOf(monthOfYear+1)+" /"
                            +String.valueOf(year);
                    //Toast.makeText(RegisterActivity.this, "Selected Date is ="+date_selected, Toast.LENGTH_SHORT).show();
                    dob.setText(date_selected);

            }
        };
//======================For picking birth day==========================

这是固定的上限,而是下限或为MinDate没有搞定了!什么是必须要做的?

推荐答案

设置 OnDateChangedListener()为您的DatePicker onDateChanged 函数中,如果设定日期大于决定限制若有 DatePicker.updateDate(minYear,minMonth,minDay); 用这个方法重新设置。

Set OnDateChangedListener() For you DatePicker and inside onDateChanged function if the date set is greater than the decide limit if so DatePicker.updateDate(minYear, minMonth, minDay); use this method to reset it.

Date minDate = new Date(1990, 10, 25);
Date maxDate = new Date(2013, 4, 15);



OnDateChangedListener listener = new OnDateChangedListener() {

    @Override
    public void onDateChanged(DatePicker view, int year, int monthOfYear,
            int dayOfMonth) {

        Date current = new Date(year, monthOfYear, dayOfMonth);

        if( current.getTime() < minDate.getTime() )
        {
            //set to minimum date
        }else if( current.getTime() > maxDate.getTime() )
        {
            //Set to max Date
        }

    }
};
YourDatePicker.init(2013, 4, 15, listener);

这篇关于设置上下日期限制的日期选择器对话框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆