【发布时间】:2017-06-07 16:26:23
【问题描述】:
我正在构建一个应用程序,它使用 DatePickerDialog 来允许用户选择他们的生日。下面是现在加载对话框的代码:
private void selectBirthdate() {
int year, month, day;
if (mBirthDate == null) {
year = DEF_YEAR;
month = DEF_MON;
day = DEF_DAY;
}
else {
year = mBirthDate.get(Calendar.YEAR);
month = mBirthDate.get(Calendar.MONTH);
day = mBirthDate.get(Calendar.DAY_OF_MONTH);
}
new DatePickerDialog(
getActivity(),
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
mBirthDate = new GregorianCalendar();
mBirthDate.set(Calendar.YEAR, year);
mBirthDate.set(Calendar.MONTH, month);
mBirthDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
if (mTxtBirthDate != null) {
mTxtBirthDate.setText(mBirthDateFormat.format(mBirthDate.getTime()));
}
}
},
year,
month,
day
).show();
}
但是,他们希望能够使用旧式微调器 DatePicker,因为在新的日历视图中,用户并不总是很明显可以更改年份。所以我一直在研究这个话题,根据我读过的内容,应该可以使用主题来强制 DatePickerDialog 进入 Spinner 模式。这就是我所做的。
(抱歉截图。显然 SO 的解析器无法处理 XML。)
然后,我更新 DatePickerDialog 构造函数以使用我的新样式:
new DatePickerDialog(
getActivity(),
R.style.MyDialogTheme,
new DatePickerDialog.OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
mBirthDate = new GregorianCalendar();
mBirthDate.set(Calendar.YEAR, year);
mBirthDate.set(Calendar.MONTH, month);
mBirthDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
if (mTxtBirthDate != null) {
mTxtBirthDate.setText(mBirthDateFormat.format(mBirthDate.getTime()));
}
}
},
year,
month,
day
).show();
显然有些事情发生了变化;对话框有一个较暗的主题。但它没有做我想要的。它仍然显示日历视图而不是微调器视图。知道我可能错过了什么吗?
【问题讨论】:
标签: android android-alertdialog android-styles android-datepicker