|
|
@ -29,20 +29,20 @@ import android.widget.NumberPicker;
|
|
|
|
//DateTimePicker功能:选择日期和时间的界面元素,FrameLayout是布局模板之一,所有的子元素全部在屏幕的右上方
|
|
|
|
//DateTimePicker功能:选择日期和时间的界面元素,FrameLayout是布局模板之一,所有的子元素全部在屏幕的右上方
|
|
|
|
public class DateTimePicker extends FrameLayout {
|
|
|
|
public class DateTimePicker extends FrameLayout {
|
|
|
|
//初始化控件
|
|
|
|
//初始化控件
|
|
|
|
private static final boolean DEFAULT_ENABLE_STATE = true;
|
|
|
|
private static final boolean DEFAULT_ENABLE_STATE = true;// 默认启用状态
|
|
|
|
private static final int HOURS_IN_HALF_DAY = 12;
|
|
|
|
private static final int HOURS_IN_HALF_DAY = 12;// 一半天的小时数
|
|
|
|
private static final int HOURS_IN_ALL_DAY = 24;
|
|
|
|
private static final int HOURS_IN_ALL_DAY = 24;// 一整天的小时数
|
|
|
|
private static final int DAYS_IN_ALL_WEEK = 7;
|
|
|
|
private static final int DAYS_IN_ALL_WEEK = 7;// 一周的天数
|
|
|
|
private static final int DATE_SPINNER_MIN_VAL = 0;
|
|
|
|
private static final int DATE_SPINNER_MIN_VAL = 0;// 日期选择器的最小值
|
|
|
|
private static final int DATE_SPINNER_MAX_VAL = DAYS_IN_ALL_WEEK - 1;
|
|
|
|
private static final int DATE_SPINNER_MAX_VAL = DAYS_IN_ALL_WEEK - 1;// 日期选择器的最大值
|
|
|
|
private static final int HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW = 0;
|
|
|
|
private static final int HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW = 0;// 24小时制下小时选择器的最小值
|
|
|
|
private static final int HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW = 23;
|
|
|
|
private static final int HOUR_SPINNER_MAX_VAL_24_HOUR_VIEW = 23;// 24小时制下小时选择器的最大值
|
|
|
|
private static final int HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW = 1;
|
|
|
|
private static final int HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW = 1;// 12小时制下小时选择器的最小值
|
|
|
|
private static final int HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW = 12;
|
|
|
|
private static final int HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW = 12;// 12小时制下小时选择器的最大值
|
|
|
|
private static final int MINUT_SPINNER_MIN_VAL = 0;
|
|
|
|
private static final int MINUT_SPINNER_MIN_VAL = 0;// 分钟选择器的最小值
|
|
|
|
private static final int MINUT_SPINNER_MAX_VAL = 59;
|
|
|
|
private static final int MINUT_SPINNER_MAX_VAL = 59;// 分钟选择器的最大值
|
|
|
|
private static final int AMPM_SPINNER_MIN_VAL = 0;
|
|
|
|
private static final int AMPM_SPINNER_MIN_VAL = 0;// 上午下午选择器的最小值
|
|
|
|
private static final int AMPM_SPINNER_MAX_VAL = 1;
|
|
|
|
private static final int AMPM_SPINNER_MAX_VAL = 1;// 上午下午选择器的最大值
|
|
|
|
|
|
|
|
|
|
|
|
//NumberPicker是数字选择器
|
|
|
|
//NumberPicker是数字选择器
|
|
|
|
//这里定义的四个变量全部是在设置闹钟时需要选择的变量(如日期、时、分、上午或者下午)
|
|
|
|
//这里定义的四个变量全部是在设置闹钟时需要选择的变量(如日期、时、分、上午或者下午)
|
|
|
@ -117,9 +117,9 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
|
|
|
|
|
|
|
onDateTimeChanged();
|
|
|
|
onDateTimeChanged();
|
|
|
|
if (isDateChanged) {
|
|
|
|
if (isDateChanged) {
|
|
|
|
setCurrentYear(cal.get(Calendar.YEAR));
|
|
|
|
setCurrentYear(cal.get(Calendar.YEAR));//设置当前年
|
|
|
|
setCurrentMonth(cal.get(Calendar.MONTH));
|
|
|
|
setCurrentMonth(cal.get(Calendar.MONTH));//设置当前月
|
|
|
|
setCurrentDay(cal.get(Calendar.DAY_OF_MONTH));
|
|
|
|
setCurrentDay(cal.get(Calendar.DAY_OF_MONTH));//设置当前日
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
@ -216,20 +216,20 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
|
|
|
|
|
|
|
//获取hour和minute
|
|
|
|
//获取hour和minute
|
|
|
|
mHourSpinner = (NumberPicker) findViewById(R.id.hour);
|
|
|
|
mHourSpinner = (NumberPicker) findViewById(R.id.hour);
|
|
|
|
mHourSpinner.setOnValueChangedListener(mOnHourChangedListener);
|
|
|
|
mHourSpinner.setOnValueChangedListener(mOnHourChangedListener);// 设置小时选择器的值变化监听器
|
|
|
|
mMinuteSpinner = (NumberPicker) findViewById(R.id.minute);
|
|
|
|
mMinuteSpinner = (NumberPicker) findViewById(R.id.minute);
|
|
|
|
mMinuteSpinner.setMinValue(MINUT_SPINNER_MIN_VAL);
|
|
|
|
mMinuteSpinner.setMinValue(MINUT_SPINNER_MIN_VAL);//设置分钟选择器的最小值为MINUT_SPINNER_MIN_VAL
|
|
|
|
mMinuteSpinner.setMaxValue(MINUT_SPINNER_MAX_VAL);
|
|
|
|
mMinuteSpinner.setMaxValue(MINUT_SPINNER_MAX_VAL);//设置分钟选择器的最大值为MINUT_SPINNER_MAX_VAL
|
|
|
|
mMinuteSpinner.setOnLongPressUpdateInterval(100);
|
|
|
|
mMinuteSpinner.setOnLongPressUpdateInterval(100);// 设置长按按钮时数值的更新间隔为100毫秒
|
|
|
|
mMinuteSpinner.setOnValueChangedListener(mOnMinuteChangedListener);
|
|
|
|
mMinuteSpinner.setOnValueChangedListener(mOnMinuteChangedListener);// 设置分钟选择器的值变化监听器
|
|
|
|
|
|
|
|
|
|
|
|
//获取am和pm
|
|
|
|
//获取am和pm
|
|
|
|
String[] stringsForAmPm = new DateFormatSymbols().getAmPmStrings();
|
|
|
|
String[] stringsForAmPm = new DateFormatSymbols().getAmPmStrings();// 获取上午和下午的字符串数组
|
|
|
|
mAmPmSpinner = (NumberPicker) findViewById(R.id.amPm);
|
|
|
|
mAmPmSpinner = (NumberPicker) findViewById(R.id.amPm);// 获取上午下午选择器的引用
|
|
|
|
mAmPmSpinner.setMinValue(AMPM_SPINNER_MIN_VAL);
|
|
|
|
mAmPmSpinner.setMinValue(AMPM_SPINNER_MIN_VAL);//设置上午下午选择器的最小值
|
|
|
|
mAmPmSpinner.setMaxValue(AMPM_SPINNER_MAX_VAL);
|
|
|
|
mAmPmSpinner.setMaxValue(AMPM_SPINNER_MAX_VAL);//设置上午下午选择器的最大值
|
|
|
|
mAmPmSpinner.setDisplayedValues(stringsForAmPm);
|
|
|
|
mAmPmSpinner.setDisplayedValues(stringsForAmPm);// 设置上午下午选择器的显示值为获取到的上午和下午字符串数组
|
|
|
|
mAmPmSpinner.setOnValueChangedListener(mOnAmPmChangedListener);
|
|
|
|
mAmPmSpinner.setOnValueChangedListener(mOnAmPmChangedListener);// 设置上午下午选择器的值变化监听器
|
|
|
|
|
|
|
|
|
|
|
|
// 将控件更新为初始状态
|
|
|
|
// 将控件更新为初始状态
|
|
|
|
updateDateControl();
|
|
|
|
updateDateControl();
|
|
|
|