DatePicker 日期选择控件,DatePickerDialog 简单的封装了DatePicker的Dialog.
1.自定义DatePickerDialog修改Title
DatePickerDialog 一个年月日日期的选择Dialog,默认情况下Title内容是当前的年月日和星期,在滑动选择的同时会同步更新Title内容。
这里实现一个简单的自定义DatePickerDialog,来设置Title内容。
package com.liupan.myfamily;
import android.app.DatePickerDialog;
import android.content.Context;
import android.widget.DatePicker;
/**
* Created by liu on 13-9-22.
* 自定义DatePickerDialog,用于修改标题
*/
public class CustomDatePickerDialog extends DatePickerDialog {
private String titleContent;
public CustomDatePickerDialog(Context context, OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth, String title) {
super(context, callBack, year, monthOfYear, dayOfMonth);
titleContent = title;
setTitle(titleContent);
}
@Override
public void onDateChanged(DatePicker view, int year, int month, int day) {
super.onDateChanged(view, year, month, day);
setTitle(titleContent);
}
}
在需要显示的时候调用即可。
- CustomDatePickerDialog dialog = new CustomDatePickerDialog(RegisterDetailActivity.this, dateSetListener, year, month, day, "请选择生日");
- dialog.show();
这样,title内容就是“请选择生日”。
在构造函数中需要传递一个Listener
- private DatePickerDialog.OnDateSetListener dateSetListener = new DatePickerDialog.OnDateSetListener() {
- @Override
- public void onDateSet(DatePicker datePicker, int year, int month, int dayOfMonth) {
- DatePicker 与Listener相关的View
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.append(year);
- int newMonth = month + 1;
- if (newMonth < 10) {
- stringBuilder.append("-0").append(newMonth);
- } else {
- //字符串拼接,不要使用第一种方式,使用第二种方式链式添加,方式一的参数中又生成了新的字符串,它先完成字符串的拼接后添加到Buffer缓冲区中
- //方式二向Buffer中添加两次数据
- //方式一
- stringBuilder.append("-" + newMonth);
- //方式二
- stringBuilder.append("-").append(newMonth);
- }
- if (dayOfMonth < 10) {
- stringBuilder.append("-0").append(dayOfMonth);
- } else {
- stringBuilder.append("-").append(dayOfMonth);
- }
- if (selectedIndex == 1) {
- birthdayEditText.setText(stringBuilder);
- } else if (selectedIndex == 2) {
- memory.setText(stringBuilder);
- }
- }
- };
2. 上边的方式可能的问题
DatePickerDialog.OnDateSetListener
这个接口在日期由修改的时候会回掉,其中在点击取消或者Back键时,同样会传递选择的时间。可能会想到监听“确定”按钮,然后通过DatePickerDialog获取DatePicker,然后获取用户选择的年,月,日,但是需要注意DatePickerDialog getDatePicker方法在API11,也就是3.0才有的,所以如果想要兼容3.0以下的话,就不能使用DatePickerDialog了。这时就需要定义DatePicker控件,然后builder.setView()设置Dialog的内容为DatePicker控件
- AlertDialog.Builder builder = new AlertDialog.Builder(RegisterDetailActivity.this);
- builder.setTitle("请选择生日日期");
- final DatePicker datePicker = new DatePicker(RegisterDetailActivity.this);
- builder.setView(datePicker);
- builder.setPositiveButton("确定", new DialogInterface.OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- int year = datePicker.getYear();
- int month = datePicker.getMonth();
- int dayOfMonth = datePicker.getDayOfMonth();
- StringBuilder stringBuilder = new StringBuilder();
- stringBuilder.append(year);
- int newMonth = month + 1;
- if (newMonth < 10) {
- stringBuilder.append("-0").append(newMonth);
- } else {
- stringBuilder.append("-").append(newMonth);
- }
- if (dayOfMonth < 10) {
- stringBuilder.append("-0").append(dayOfMonth);
- } else {
- stringBuilder.append("-").append(dayOfMonth);
- }
- TextView birthday = (TextView) findViewById(R.id.birthday);
- birthday.setText(stringBuilder.toString());
- TextView chineseZodiacText = (TextView) findViewById(R.id.chineseZodiac);
- chineseZodiacText.setVisibility(View.VISIBLE);
- String chineseZodiac = getChineseZodiac(year);
- chineseZodiacText.setText(chineseZodiac);
- TextView horoscopesText = (TextView) findViewById(R.id.horoscopes);
- horoscopesText.setVisibility(View.VISIBLE);
- String horoscopes = getHoroscopes(newMonth, dayOfMonth);
- horoscopesText.setText(horoscopes);
- }
- });
- builder.setNegativeButton("取消", null);
- builder.show();