DatePicker 和 TimePicker具体怎么用先不写了,网上一大堆,自己查吧。
这两个控件直接拿来用节省了开发时间,但是也有弊端。
1、产品要求不允许 查看/选择 以前的时间。
“不允许查看”是没办法了,只能在禁止选择时间下功夫,定义一个dialog,把这两个组件放到布局里
点击dialog的确定按钮时判断,如果时间合理就关闭,如果不合理就不关闭dialog,但是dialog确定按钮默认是关闭dialog的,当然也可以自定义按钮,为了保持沿用按钮系统风格,所以只能通过反射去欺骗一下,部分代码如下:
new AlertDialog.Builder(mActivity)
.setTitle(initDate)
.setView(dateTimeLayout)
.setPositiveButton(R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
if (判断一下,如果是禁止选择的日期) {
//toast.show("不能选择之前的日期");
setCanClose(false);//不取消dialog
}
else{
//拿到合理日期了,可以直接处理
setCanClose(true);
}
}
})
.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
setCanClose(true);
}
}).show();
/**
* 点击按钮不关闭对话框
*
* @param canClose
*/
private void setCanClose(boolean canClose) {
if (mDialog.isShowing() != canClose) {
try {
Field field = mDialog.getClass().getSuperclass().getDeclaredField("mShowing");
field.setAccessible(true);
field.set(mDialog,
canClose);
} catch (Exception e) {
e.printStackTrace();
}
}
}
2、在Android5.0系统里,TimePicker的setOnTimeChangedListener不回调。
遇到了这个bug,去google查了一下,原因是Android5.0有这问题,需要设置滚动样式才会有回调。
所以我强制设置了滚动样式。
这两个控件样式随系统版本不同而不同,Android5.0之前是滚动选择的,很简洁,Android5.0(包含)之后是日历钟表样式。
为了保持一致,我设置了使用滚动的样式。
想让他们一直是滚动样式,需要分别设置他们的属性:
android:datePickerMode="spinner"
android:timePickerMode="spinner"
这两个属性在Android5.0版本才有的