datepicker,日期选择器,一种可视化较高的数据接收控件,是android自带的一个控件。
常见的应用场景:查账。yyyy年MM月dd日至yyyy年MM月dd日,根据日期区间搜索账单信息。
日期选择器实现方式有两种:一,自定义布局+alertdialog;二,datePickerDialog。
第一种方法存在一个问题,设置样式(AlertDialog.THEME_HOLO_LIGHT)时会出错,可能是跟activity的样式冲突,也可能是其他原因,这里我并没有解决,而且,你需要手动设置datepicker的值(当第二次进入dialog时,应当把第一次设置的值传进来,这样方便用户微调时间),这样逻辑多了一步,于是我干脆就用第二种方法了。
第二种方法:datePickerDialog:
public void showDateTimePicKDialog(final TextView inputDate, int year, int month, int day) {
ad = new DatePickerDialog(Activity.this, AlertDialog.THEME_HOLO_LIGHT,new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) {
String mm="";
String dd ="";
if(monthOfYear<=8){
mm="0"+(monthOfYear+1);
}else{
mm=String.valueOf(monthOfYear+1);
}
if(dayOfMonth<=9){
dd= "0"+dayOfMonth;
}else{
dd=String.valueOf(dayOfMonth);
}
pickerDateTime = String.valueOf(year)+"-"+mm+"-"+dd;
}
}, year,month,day);
ad.setButton(DialogInterface.BUTTON_POSITIVE, "确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
DatePicker datePicker=ad.getDatePicker();
int monthOfYear=datePicker.getMonth();
int dayOfMonth=datePicker.getDayOfMonth();
int year=datePicker.getYear();
String mm="";
String dd ="";
if(monthOfYear<=8){
mm="0"+(monthOfYear+1);
}else{
mm=String.valueOf(monthOfYear+1);
}
if(dayOfMonth<=9){
dd= "0"+dayOfMonth;
}else{
dd=String.valueOf(dayOfMonth);
}
pickerDateTime = String.valueOf(year)+"-"+mm+"-"+dd;
inputDate.setText(pickerDateTime);
}
});
ad.setButton(DialogInterface.BUTTON_NEGATIVE, "取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
inputDate.setText("");
}
});
ad.show();}
关键代码在这里了,解释一下,
</pre><p></p><pre>
AlertDialog.THEME_HOLO_LIGHT风格应该是公认比较好看的风格了,一般都用这个。
注意:onDateSet()是滚动控件时自动记录日期值的,貌似在android5.0之前的机器才可以,android5.0之后以及某些机型(如努比亚512X)是没用触发这个方法的。
为了解决这个问题,用了我一点时间,它肯定有接口可以收到数据的,结果肯定是在setButton(int whichButton, CharSequence text, OnClickListener listener)这里面
处理的,数据从哪来呢?摸索了一番,发现datePickerDialog有个api叫getDatePicker(),于是很容易就知道datePicker当前的日期值了。
思路大概是这样。