DatePicker在实际的android开发中是比较常用的一个控件,只要跟日期有关的,我们都可以调用它来为我们设置。官方API中的这个Demo相对简单一些,讲解了怎么调用,怎么为它添加监听器。进入正题:
Android提供一个小部件来选择一个日期,使用DatePicker小部件,在一个界面允许用户选择年、月、日。
本教程中,我们将创建一个DatePickerDialog,再一个日期选择器上有一个按钮,当用户点击这个按钮的时候,新的日期将更新到TextView上面。
1、创建一个名为HelloDatePicker的android项目。
2、打开res/layout/activity_main文件,插入下列内容:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" >
<TextView
android:id="@+id/dateDisplay"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />
<Button
android:id="@+id/pickDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Change the date" />
</LinearLayout>
![](https://img-my.csdn.net/uploads/201208/18/1345256347_2243.jpg)
3、在HelloDatePicker.java类中,声明以下变量
private TextView mDateDisplay;
private Button mPickDate;
private int mYear;
private int mMonth;
private int mDay;
static final int DATE_DIALOG_ID = 0;
最后一个就是定义了一个在调用 Dialog 时作为 ID 的一个值,当我们的请求 ID=0 时,会执行我们指定的操作。在本实例中,由于我们只需要一个Button,也只有一个DatePicker,这个定义与否不影响程序的运行,当然出于规范化和以后的开发,还是按部就班的来。
4、在onCreate()方法中添加下面的内容。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mDateDisplay = (TextView) findViewById(R.id.dateDisplay);
mPickDate = (Button) findViewById(R.id.pickDate);
mPickDate.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
showDialog(DATE_DIALOG_ID);
}
});
final Calendar c = Calendar.getInstance();
mYear = c.get(Calendar.YEAR);
mMonth = c.get(Calendar.MONTH);
mDay = c.get(Calendar.DAY_OF_MONTH);
updateDisplay();
}
这里面先是实例化了mDateDisplay(TextView)跟mPickDate(Button),然后为mPickDate添加了单击事件,这个事件的功能就是调出我们的DatePickerDialog。
后面的一段代码,就是用Calendar获取了当前的系统时期,并且通过updateDisplay()方法,将结果传递到了mDateDisplay(TextView)当中。
5、 编写 updateDisplay() 方法
private void updateDisplay() {
mDateDisplay.setText(new StringBuilder().
append(mMonth+1).append("-").append(mDay)
.append( "-").append(mYear).append(" "));
}
实现把日期传递到mDateDisplay(TextView)当中。
6 、为 DatePickerDialog 添加一个 DatePickerDialog 事件private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
mYear = year;
mMonth = monthOfYear;
mDay = dayOfMonth;
updateDisplay();
}
};
将DatePicker中的值传递到了我们声明的三个日期值当中。
7、 重写onCreateDialog()方法
protected Dialog onCreateDialog(int id) {
switch (id) {
case DATE_DIALOG_ID:
return new DatePickerDialog(this, mDateSetListener, mYear, mMonth,mDay);
}
return null;
}
像前面说的,其实在本实例中完全可以不用定义DATE_DIALOG_ID,因为就只有一个Button,我们也只需要Button实现一个功能,而这实现的功能也只需要一个DatePicker。当然这里是出于规范,毕竟我们在实际的开发中只设置一个Button的情况比较少。在这里简化成这样也是可以的:
protected Dialog onCreateDialog(int id) {
return new DatePickerDialog(this, mDateSetListener, mYear, mMonth,mDay);
}
8、这样,我们就完成了一个DatePicker的Demo