安卓时间选择器,时间对话框,DatePickerDialog类。

来源:互联网 发布:如何挑选油烟机知乎 编辑:程序博客网 时间:2024/06/09 14:34
<span style="font-family: 微软雅黑; font-size: 9.6pt; background-color: rgb(228, 228, 255);">先解析,再上代码。</span>
给一个图片或者文本框(常用是文本框添加点击事件)
new DatePickerDialog(MainActivity.this, mDateSetListener_in, mYear_in, mMonth_in, mDay_in).show();
即可以创建一个时间选择器,第一个参数为调用它的活动,第二个参数是监听器(下文会提到),第三、四、五个参数分别为初始化的年月日,.show()显示这个对话框。三四五不传时,初始化的值为1970 01 01,这并不是理想的结果,所以一般在构造时间选择对话框的时候都会初始化这个值为当前时间。
所以正常写法是这样
Calendar calendar = Calendar.getInstance();//拿到calendar类mYear_in = calendar.get(Calendar.YEAR);//拿到当前年mMonth_in = calendar.get(Calendar.MONTH);//当前月mDay_in = calendar.get(Calendar.DAY_OF_MONTH);//当前日new DatePickerDialog(MainActivity.this, mDateSetListener_in, mYear_in, mMonth_in, mDay_in).show();

下面讲监听器,这个监听器为 DatePickerDialog.OnDateSetListener() 类,需要重写onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) 方法。
每当在对话框选择一个时间时,便会触发这个监听器的onDateSet方法,传入的参数year为选择的年,monthofyear为选择的月,dayofmonth为选择的日。(时间的月份从0开始计数),便可在这个监听器里面进行赋值操作,或者handler操作,等等。

示例:
按钮点击时:
 Calendar calendar = Calendar.getInstance();        mYear_in = calendar.get(Calendar.YEAR);        Yearmax_in = mYear_in;        mMonth_in = calendar.get(Calendar.MONTH);        Monthmax_in = mMonth_in;        mDay_in = calendar.get(Calendar.DAY_OF_MONTH);        Daymax_in = mDay_in;        tv_time_in.setText(mYear_in + "年" + (mMonth_in + 1) + "月" + mDay_in + "日");        tv_time_in.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                new DatePickerDialog(MainActivity.this, mDateSetListener_in, mYear_in, mMonth_in, mDay_in).show();            }        });
监听器:
<pre name="code" class="java"> private DatePickerDialog.OnDateSetListener mDateSetListener_in = new DatePickerDialog.OnDateSetListener() {        @Override        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {            if (year < Yearmax_in) {//只要年小于即可                mYear_in = year;                mMonth_in = monthOfYear;                mDay_in = dayOfMonth;                handler.sendEmptyMessage(5);//选完后通知handler修改显示的值            } else if (year == Yearmax_in && monthOfYear < Monthmax_in) {//年等于,月份小于即可                mYear_in = year;                mMonth_in = monthOfYear;                mDay_in = dayOfMonth;                handler.sendEmptyMessage(5);//选完后通知handler修改显示的值            } else if (year == Yearmax_in && monthOfYear == Monthmax_in && dayOfMonth <= Daymax_in) {//年等于,月份等于,天数小于等于                mYear_in = year;                mMonth_in = monthOfYear;                mDay_in = dayOfMonth;                handler.sendEmptyMessage(5);//选完后通知handler修改显示的值            } else {//其他情况均设置失败                handler.sendEmptyMessage(6);            }        }    };
以上加上了判断确保选择的值不会超过当前系统时间。



                                             
0 0