android 自定义 datepickerdialog,Android DatePickerDialog使用指南

大家在应用中大部分都会使用到日历

那么这篇文章就来讲一下如何使用系统自带的日历DatePickerDialog

首先调用Calendar类获取年月日

Calendar ca = Calendar.getInstance();

int mYear = ca.get(Calendar.YEAR);

int mMonth = ca.get(Calendar.MONTH);

int mDay = ca.get(Calendar.DAY_OF_MONTH);

然后将获取到的年月日放进new出来的DatePickerDialog中

DatePickerDialog datePickerDialog = new DatePickerDialog(getContext(),

new DatePickerDialog.OnDateSetListener() {

@Override

public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {

mYear = year;

mMonth = month;

mDay = dayOfMonth;

final String data = (month+1) + "月-" + dayOfMonth + "日 ";

}

},

mYear, mMonth, mDay);

datePickerDialog.show();

这样我们就可以进行日期的选择了

但是如果我们想只进行年月的选择不进行日选择怎么办呢

代码如下

private DatePicker findDatePicker(ViewGroup group) {

if (group != null) {

for (int i = 0, j = group.getChildCount(); i < j; i++) {

View child = group.getChildAt(i);

if (child instanceof DatePicker) {

return (DatePicker) child;

} else if (child instanceof ViewGroup) {

DatePicker result = findDatePicker((ViewGroup) child);

if (result != null)

return result;

}

}

}

return null;

}

//只显示年月,隐藏掉日

DatePicker dp = findDatePicker((ViewGroup) datePickerDialog.getWindow().getDecorView());

if (dp != null) {

((ViewGroup)((ViewGroup)dp.getChildAt(2)).getChildAt(2))

.getChildAt(2).setVisibility(View.GONE);

//如果想隐藏掉年,将getChildAt(2)改为getChildAt(0)

}

那么还有一个疑问如果我们想改变系统DatePickerDialog的风格怎么办呢

其实很简单

只需要在style.xml中自己定义即可

然后把定义好的样式放到DatePickerDialog构造中的第一个参数后即可

代码如下

DatePickerDialog datePickerDialog = new DatePickerDialog(getContext(), R.style.MyDatePickerDialogTheme,

new DatePickerDialog.OnDateSetListener() {

@Override

public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {

mYear = year;

mMonth = month;

mDay = dayOfMonth;

final String data = (month+1) + "月-" + dayOfMonth + "日 ";

}

},

mYear, mMonth, mDay);

datePickerDialog.show();

好了到这里DatePickerDialog的定义就到此结束了