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();