好久没写了,格式什么的先算了
最近搞安卓app,需要使用到选择日期的控件,首先使用了DatePickerDialog,继承自AlertDialog,内部使用了DatePicker。
如果需要修改样式的话就不是很方便了,可以自己派生一个DatePickerDialog的子类,再使用AlertDialog的方法设置样式。
不过比较灵活且更兼容API Level 11之前平台的方法是产生一个AlertDialog,通过Bulider来调整样式,使用SetView将一个DatePicker设为View。
mButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mCalendar = Calendar.getInstance();
final AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
final DatePicker dp = new DatePicker(getActivity());
dp.setCalendarViewShown(false);//注意:如果使用了setMaxDate必须关掉CalenderView,否则会报错"FATAL EXCEPTION: main java.lang.NullPointerException",
long mindate = System.currentTimeMillis() - 1000L; //注意:如果不提前一秒的话会报错"java.lang.IllegalArgumentException: fromDate: XXX does not precede toDate: XXX"
long maxdate = mindate + 7 * 24 * 3600 * 1000L; //设置DatePicker范围,从今天起之后一周
dp.setMinDate(mindate);
dp.setMaxDate(maxdate);
builder.setView(dp);
builder.setTitle(getString(R.string.pls_select_date));
builder.setPositiveButton(getString(R.string.set), new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO: Dispatch listener to Activity
String new_text = (dp.getMonth() + 1) + getString(R.string.month) + dp.getDayOfMonth() + getString(R.string.day);
mButton.setText(new_text); //可以设置日期之后修改Button文字之类的。
}
});
builder.setNegativeButton(getString(R.string.cancel), null);
builder.show();
}
});
需要注意的就是这两点。