|
|
|
@ -28,6 +28,12 @@ import android.view.View;
|
|
|
|
|
import android.widget.FrameLayout;
|
|
|
|
|
import android.widget.NumberPicker;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @description:时间同步
|
|
|
|
|
* @date: 2023/12/29 11:40
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
*/
|
|
|
|
|
public class DateTimePicker extends FrameLayout {
|
|
|
|
|
|
|
|
|
|
private static final boolean DEFAULT_ENABLE_STATE = true;
|
|
|
|
@ -65,6 +71,16 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
private OnDateTimeChangedListener mOnDateTimeChangedListener;
|
|
|
|
|
|
|
|
|
|
private NumberPicker.OnValueChangeListener mOnDateChangedListener = new NumberPicker.OnValueChangeListener() {
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: onValueChange
|
|
|
|
|
* @description:对日期的监听
|
|
|
|
|
* @date: 2023/12/29 11:41
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
* @param:NumberPicker picker
|
|
|
|
|
* @param:int oldVal
|
|
|
|
|
* @param: int newVal
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
|
|
|
|
|
mDate.add(Calendar.DAY_OF_YEAR, newVal - oldVal);
|
|
|
|
@ -74,6 +90,16 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener() {
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: onValueChange
|
|
|
|
|
* @description:对小时(Hour)的监听
|
|
|
|
|
* @date: 2023/12/29 11:42
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
* @param:NumberPicker picker
|
|
|
|
|
* @param:int oldVal
|
|
|
|
|
* @param:int newVal
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
|
|
|
|
|
boolean isDateChanged = false;
|
|
|
|
@ -116,6 +142,16 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
private NumberPicker.OnValueChangeListener mOnMinuteChangedListener = new NumberPicker.OnValueChangeListener() {
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: onValueChange
|
|
|
|
|
* @description:对分钟的监听
|
|
|
|
|
* @date: 2023/12/29 11:43
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
* @param:NumberPicker picker
|
|
|
|
|
* @param:int oldVal
|
|
|
|
|
* @param:int newVal
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
|
|
|
|
|
int minValue = mMinuteSpinner.getMinValue();
|
|
|
|
@ -146,6 +182,16 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
|
|
|
|
|
private NumberPicker.OnValueChangeListener mOnAmPmChangedListener = new NumberPicker.OnValueChangeListener() {
|
|
|
|
|
@Override
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: onValueChange
|
|
|
|
|
* @description: 对AM和PM的监听
|
|
|
|
|
* @date: 2023/12/29 11:43
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
* @param:NumberPicker picker
|
|
|
|
|
* @param:int oldVal
|
|
|
|
|
* @param: int newVal
|
|
|
|
|
*/
|
|
|
|
|
public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
|
|
|
|
|
mIsAm = !mIsAm;
|
|
|
|
|
if (mIsAm) {
|
|
|
|
@ -157,12 +203,20 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
onDateTimeChanged();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public interface OnDateTimeChangedListener {
|
|
|
|
|
void onDateTimeChanged(DateTimePicker view, int year, int month,
|
|
|
|
|
int dayOfMonth, int hourOfDay, int minute);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: DateTimePicker
|
|
|
|
|
* @description:获取当前的系统时间
|
|
|
|
|
* @date: 2023/12/29 11:45
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
* @param:Context context
|
|
|
|
|
*/
|
|
|
|
|
public DateTimePicker(Context context) {
|
|
|
|
|
this(context, System.currentTimeMillis());
|
|
|
|
|
}
|
|
|
|
@ -171,6 +225,16 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
this(context, date, DateFormat.is24HourFormat(context));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: DateTimePicker
|
|
|
|
|
* @description:获取系统时间
|
|
|
|
|
* @date: 2023/12/29 11:47
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
* @param:Context context
|
|
|
|
|
* @param:long date
|
|
|
|
|
* @param:boolean is24HourView
|
|
|
|
|
*/
|
|
|
|
|
public DateTimePicker(Context context, long date, boolean is24HourView) {
|
|
|
|
|
super(context);
|
|
|
|
|
mDate = Calendar.getInstance();
|
|
|
|
@ -214,6 +278,14 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
mInitialising = false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: setEnabled
|
|
|
|
|
* @description:对时间的启动
|
|
|
|
|
* @date: 2023/12/29 11:49
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
* @param:boolean enabled
|
|
|
|
|
*/
|
|
|
|
|
@Override
|
|
|
|
|
public void setEnabled(boolean enabled) {
|
|
|
|
|
if (mIsEnabled == enabled) {
|
|
|
|
@ -246,6 +318,14 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
*
|
|
|
|
|
* @param date The current date in millis
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: setCurrentDate
|
|
|
|
|
* @description:获取当前时间
|
|
|
|
|
* @date: 2023/12/29 11:51
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
* @param:long date
|
|
|
|
|
*/
|
|
|
|
|
public void setCurrentDate(long date) {
|
|
|
|
|
Calendar cal = Calendar.getInstance();
|
|
|
|
|
cal.setTimeInMillis(date);
|
|
|
|
@ -262,6 +342,14 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
* @param hourOfDay The current hourOfDay
|
|
|
|
|
* @param minute The current minute
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: setCurrentDate
|
|
|
|
|
* @description:获取当前时间
|
|
|
|
|
* @date: 2023/12/29 11:51
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
* @param:long date
|
|
|
|
|
*/
|
|
|
|
|
public void setCurrentDate(int year, int month,
|
|
|
|
|
int dayOfMonth, int hourOfDay, int minute) {
|
|
|
|
|
setCurrentYear(year);
|
|
|
|
@ -285,6 +373,14 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
*
|
|
|
|
|
* @param year The current year
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: setCurrentYear
|
|
|
|
|
* @description:Set current year
|
|
|
|
|
* @date: 2024/1/7 9:53
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
* @param:year
|
|
|
|
|
*/
|
|
|
|
|
public void setCurrentYear(int year) {
|
|
|
|
|
if (!mInitialising && year == getCurrentYear()) {
|
|
|
|
|
return;
|
|
|
|
@ -293,12 +389,19 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
updateDateControl();
|
|
|
|
|
onDateTimeChanged();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Get current month in the year
|
|
|
|
|
*
|
|
|
|
|
* @return The current month in the year
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: getCurrentMonth
|
|
|
|
|
* @description:Get current month in the year
|
|
|
|
|
* @date: 2024/1/7 9:54
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
* @return:current month
|
|
|
|
|
*/
|
|
|
|
|
public int getCurrentMonth() {
|
|
|
|
|
return mDate.get(Calendar.MONTH);
|
|
|
|
|
}
|
|
|
|
@ -308,6 +411,14 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
*
|
|
|
|
|
* @param month The month in the year
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: setCurrentMonth
|
|
|
|
|
* @description:Set current month in the year
|
|
|
|
|
* @date: 2024/1/7 9:56
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
* @param:current month
|
|
|
|
|
*/
|
|
|
|
|
public void setCurrentMonth(int month) {
|
|
|
|
|
if (!mInitialising && month == getCurrentMonth()) {
|
|
|
|
|
return;
|
|
|
|
@ -322,6 +433,14 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
*
|
|
|
|
|
* @return The day of the month
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: getCurrentDay
|
|
|
|
|
* @description:Get current day of the month
|
|
|
|
|
* @date: 2024/1/7 9:57
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
* @return:current day
|
|
|
|
|
*/
|
|
|
|
|
public int getCurrentDay() {
|
|
|
|
|
return mDate.get(Calendar.DAY_OF_MONTH);
|
|
|
|
|
}
|
|
|
|
@ -331,6 +450,14 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
*
|
|
|
|
|
* @param dayOfMonth The day of the month
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: setCurrentDay
|
|
|
|
|
* @description:Set current day of the month
|
|
|
|
|
* @date: 2024/1/7 9:57
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
* @param:The day of the month
|
|
|
|
|
*/
|
|
|
|
|
public void setCurrentDay(int dayOfMonth) {
|
|
|
|
|
if (!mInitialising && dayOfMonth == getCurrentDay()) {
|
|
|
|
|
return;
|
|
|
|
@ -344,10 +471,26 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
* Get current hour in 24 hour mode, in the range (0~23)
|
|
|
|
|
* @return The current hour in 24 hour mode
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: getCurrentHourOfDay
|
|
|
|
|
* @description:Get current hour in 24 hour mode
|
|
|
|
|
* @date: 2024/1/7 9:58
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
* @return:The current hour in 24 hour mode
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
public int getCurrentHourOfDay() {
|
|
|
|
|
return mDate.get(Calendar.HOUR_OF_DAY);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: getCurrentHour
|
|
|
|
|
* @description:Get current hour
|
|
|
|
|
* @date: 2024/1/7 9:58
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
* @return:The current hour
|
|
|
|
|
*/
|
|
|
|
|
private int getCurrentHour() {
|
|
|
|
|
if (mIs24HourView){
|
|
|
|
|
return getCurrentHourOfDay();
|
|
|
|
@ -366,6 +509,14 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
*
|
|
|
|
|
* @param hourOfDay
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: setCurrentHour
|
|
|
|
|
* @description:Set current hour in 24 hour mode
|
|
|
|
|
* @date: 2024/1/7 9:59
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
* @param:hourOfDay
|
|
|
|
|
*/
|
|
|
|
|
public void setCurrentHour(int hourOfDay) {
|
|
|
|
|
if (!mInitialising && hourOfDay == getCurrentHourOfDay()) {
|
|
|
|
|
return;
|
|
|
|
@ -394,6 +545,14 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
*
|
|
|
|
|
* @return The Current Minute
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: getCurrentMinute
|
|
|
|
|
* @description: Get currentMinute
|
|
|
|
|
* @date: 2024/1/7 9:59
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
* @return:The Current Minute
|
|
|
|
|
*/
|
|
|
|
|
public int getCurrentMinute() {
|
|
|
|
|
return mDate.get(Calendar.MINUTE);
|
|
|
|
|
}
|
|
|
|
@ -401,6 +560,14 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
/**
|
|
|
|
|
* Set current minute
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: setCurrentMinute
|
|
|
|
|
* @description:Set current minute
|
|
|
|
|
* @date: 2024/1/7 9:59
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
* @param:int minute
|
|
|
|
|
*/
|
|
|
|
|
public void setCurrentMinute(int minute) {
|
|
|
|
|
if (!mInitialising && minute == getCurrentMinute()) {
|
|
|
|
|
return;
|
|
|
|
@ -413,6 +580,14 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
/**
|
|
|
|
|
* @return true if this is in 24 hour view else false.
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: is24HourView
|
|
|
|
|
* @description:判断是否是24Hour视图
|
|
|
|
|
* @date: 2024/1/7 10:00
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
* @return:true if this is in 24 hour view else false.
|
|
|
|
|
*/
|
|
|
|
|
public boolean is24HourView () {
|
|
|
|
|
return mIs24HourView;
|
|
|
|
|
}
|
|
|
|
@ -422,6 +597,14 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
*
|
|
|
|
|
* @param is24HourView True for 24 hour mode. False for AM/PM mode.
|
|
|
|
|
*/
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: set24HourView
|
|
|
|
|
* @description:Set whether in 24 hour or AM/PM mode
|
|
|
|
|
* @date: 2024/1/7 10:01
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
* @param:is24HourView True for 24 hour mode
|
|
|
|
|
*/
|
|
|
|
|
public void set24HourView(boolean is24HourView) {
|
|
|
|
|
if (mIs24HourView == is24HourView) {
|
|
|
|
|
return;
|
|
|
|
@ -434,6 +617,13 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
updateAmPmControl();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: updateDateControl
|
|
|
|
|
* @description:更新时间管理
|
|
|
|
|
* @date: 2023/12/29 11:53
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
*/
|
|
|
|
|
private void updateDateControl() {
|
|
|
|
|
Calendar cal = Calendar.getInstance();
|
|
|
|
|
cal.setTimeInMillis(mDate.getTimeInMillis());
|
|
|
|
@ -448,6 +638,13 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
mDateSpinner.invalidate();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: updateDateControl
|
|
|
|
|
* @description:更新ampm管理
|
|
|
|
|
* @date: 2023/12/29 11:53
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
*/
|
|
|
|
|
private void updateAmPmControl() {
|
|
|
|
|
if (mIs24HourView) {
|
|
|
|
|
mAmPmSpinner.setVisibility(View.GONE);
|
|
|
|
@ -458,6 +655,13 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: updateDateControl
|
|
|
|
|
* @description:更新小时管理
|
|
|
|
|
* @date: 2023/12/29 11:53
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
*/
|
|
|
|
|
private void updateHourControl() {
|
|
|
|
|
if (mIs24HourView) {
|
|
|
|
|
mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_24_HOUR_VIEW);
|
|
|
|
@ -476,6 +680,13 @@ public class DateTimePicker extends FrameLayout {
|
|
|
|
|
mOnDateTimeChangedListener = callback;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @classname: DateTimePicker
|
|
|
|
|
* @methodname: onDateTimeChanged
|
|
|
|
|
* @description:获取当前时间
|
|
|
|
|
* @date: 2023/12/29 11:54
|
|
|
|
|
* @author: wangrunze
|
|
|
|
|
*/
|
|
|
|
|
private void onDateTimeChanged() {
|
|
|
|
|
if (mOnDateTimeChangedListener != null) {
|
|
|
|
|
mOnDateTimeChangedListener.onDateTimeChanged(this, getCurrentYear(),
|
|
|
|
|