最新消息: USBMI致力于为网友们分享Windows、安卓、IOS等主流手机系统相关的资讯以及评测、同时提供相关教程、应用、软件下载等服务。

自定义时间(小时:分钟)选择器

互联网 admin 2浏览 0评论

自定义时间(小时:分钟)选择器

要实现效果如下:

1. 24小时制,小时最早时间为8点,当前小时之前的不显示;

2. 分钟间隔15分钟,仅支持0、15、30、45 分钟时间。

3. 开始时间大于当前时间,结束时间与开始时间差15分钟到3小时

1.布局 :dialog_comlib_schedule_time.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=""android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/Color_M_opacity"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="10dp"android:layout_marginLeft="15dp"android:layout_marginTop="20dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:text="@string/comlib_delivery_setting_time"android:textColor="@color/Color_V"android:textSize="18sp" /><ImageViewandroid:id="@+id/close"android:layout_width="14dp"android:layout_height="14dp"android:layout_centerVertical="true"android:layout_alignParentRight="true"android:layout_marginRight="16dp"android:gravity="center"android:src="@drawable/ic_comlib_cancle" /></RelativeLayout><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="14dp"android:layout_marginLeft="15dp"android:text="@string/comlib_delivery_time_range"android:textColor="@color/cutlineColor"android:textSize="14sp" /></LinearLayout><include layout="@layout/include_comlib_line_horizontal" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="198dp"android:orientation="horizontal"><TimePickerandroid:id="@+id/tp_left"android:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"android:timePickerMode="spinner"android:layout_gravity="center_vertical" /><Viewandroid:id="@+id/line_v"android:layout_width="1dp"android:layout_height="74dp"android:layout_gravity="center"android:background="@drawable/ic_line_vertical" /><TimePickerandroid:id="@+id/tp_right"android:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"android:timePickerMode="spinner"android:layout_gravity="center_vertical" /></LinearLayout></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:orientation="vertical"><Buttonandroid:id="@+id/btn_confirm"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/Color_Yellow"android:gravity="center"android:text="@string/comlib_confirm"android:textSize="18sp"android:textStyle="bold" /></LinearLayout></LinearLayout>

2.  核心代码:TimerScheduleDialog.java

public class TimerScheduleDialog {public static final int FIFTEEN = 15;private Context mContext;private AlertDialog dialog;private TimePicker tpLeft;private TimePicker tpRight;private Button btnConfirm;private ImageView ivClose;private confirmButtonClick confirmClick;private View dialogView;private String pickText;private String leftTime;private String rightTime;private int mStartHour = 8;/*** 间隔15的数组,用来表示可设置的分钟值*/private String[] minute = new String[]{"00", "15", "30", "45"};public TimerScheduleDialog(@NonNull Context context, String text) {this.mContext = context;this.pickText = text;this.leftTime = text.substring(0, 5);this.rightTime = text.substring(text.length() - 5);}/*** 初始化时间显示*/private void initScheduleTime() {if (StringUtils.isEmpty(leftTime) || NULL_TIME.equals(leftTime)) {int hour = Integer.parseInt(DateUtils.getTimeOfHour()) + 1;//没有初始化,开始小时=当前小时+1leftTime = hour + TIME_HOUR;setCurTimerPick(tpLeft, hour - mStartHour, 0);} else {setCurTimerPick(tpLeft, getHour(leftTime) - mStartHour, getMinute(leftTime));}if (StringUtils.isEmpty(rightTime) || NULL_TIME.equals(rightTime)) {int hour = Integer.parseInt(DateUtils.getTimeOfHour()) + 2;//没有初始化,开始小时=当前小时+2rightTime = hour + TIME_HOUR;setCurTimerPick(tpRight, hour - mStartHour, 0);} else {setCurTimerPick(tpRight, getHour(rightTime) - mStartHour, getMinute(rightTime));}}/*** 显示时间、分钟** @param picker* @param hour* @param minute*/private void setCurTimerPick(TimePicker picker, int hour, int minute) {picker.setCurrentHour(hour);picker.setCurrentMinute(minute);}public void show() {initDialog();initView();initListener();initScheduleTime();}private void initDialog() {if (dialog != null) {return;}LayoutInflater inflater = LayoutInflater.from(mContext);dialogView = inflater.inflate(R.layout.dialog_comlib_schedule_time, null);dialog = new AlertDialog.Builder(mContext, R.style.ComLib_Dialog).create();dialog.setCancelable(true);dialog.show();Window window = dialog.getWindow();window.setContentView(dialogView);window.setGravity(Gravity.BOTTOM);window.setWindowAnimations(R.style.comlib_popup_anim_bottom_style);WindowManager.LayoutParams params = window.getAttributes();params.width = WindowManager.LayoutParams.MATCH_PARENT;params.height = WindowManager.LayoutParams.WRAP_CONTENT;window.setAttributes(params);}/*** 初始化时间选择器显示*/private void initView() {tpLeft = (TimePicker) dialogView.findViewById(R.id.tp_left);initTimePicker(tpLeft);tpRight = (TimePicker) dialogView.findViewById(R.id.tp_right);initTimePicker(tpRight);btnConfirm = (Button) dialogView.findViewById(R.id.btn_confirm);ivClose = (ImageView) dialogView.findViewById(R.id.close);}/*** 初始化listener*/private void initListener() {tpLeft.setOnTimeChangedListener((view1, hourOfDay, minute)-> leftTime = formateTime(hourOfDay, minute));tpRight.setOnTimeChangedListener((view12, hourOfDay, minute)-> rightTime = formateTime(hourOfDay, minute));btnConfirm.setOnClickListener(v -> checkPickTime());ivClose.setOnClickListener(v -> dialog.dismiss());}/*** 校验选择时间*/private void checkPickTime() {if (confirmClick != null) {if (comparePickTime()) {pickText = leftTime + TIME_FORMAT + rightTime;confirmClick.confirmScheduleClick(pickText);} else {ToastUtils.show(R.string.comlib_delivery_time_range_toast);}}}/*** 比较选择的时间大小,左边小于右边*/private boolean comparePickTime() {int leftTime = (tpLeft.getCurrentHour() + mStartHour) * 60 + tpLeft.getCurrentMinute() * 15;int rightTime = (tpRight.getCurrentHour() + mStartHour) * 60 + tpRight.getCurrentMinute() * 15;int curTime = Integer.parseInt(DateUtils.getTimeOfHour()) * 60 + Integer.parseInt(DateUtils.getTimeOfMinutes());int differ = rightTime - leftTime;if (leftTime > curTime && differ >= 15 && differ <= 180) {//在15分钟到3小时之间,且左边的时间要大于当前时间return true;} else {return false;}}public void setDialogOnClickListener(confirmButtonClick buttonClick) {this.confirmClick = buttonClick;}public interface confirmButtonClick {void confirmScheduleClick(String pickTime);}/*** 初始化 时间选择器为24小时制* 设置 分钟为15min 间隔** @param picker*/private void initTimePicker(TimePicker picker) {picker.setIs24HourView(true);setNumberPickerTextSize(picker);setTimePickerTextClolr(picker);}/*** 查找timePicker里面的android.widget.NumberPicker组件* 并对其进行时间间隔设置** @param viewGroup TimePicker timePicker*/private void setNumberPickerTextSize(ViewGroup viewGroup) {List<NumberPicker> npList = findNumberPicker(viewGroup);String[] arrHours = initHourRange();if (null != npList) {for (NumberPicker mMinuteSpinner : npList) {hideSpinner(mMinuteSpinner);if (mMinuteSpinner.toString().contains("id/minute")) {//对分钟进行间隔设置mMinuteSpinner.setMinValue(0);mMinuteSpinner.setMaxValue(minute.length - 1);mMinuteSpinner.setDisplayedValues(minute);  //这里的minute是一个String数组,就是要显示的分钟值}if (mMinuteSpinner.toString().contains("id/hour")) {//对小时进行间隔设置mMinuteSpinner.setMinValue(0);mMinuteSpinner.setMaxValue(arrHours.length - 1);mMinuteSpinner.setDisplayedValues(arrHours);  //这里的hours是一个String数组,就是要显示的小时值}}}}/*** 初始化时间选择器颜色*/private void setTimePickerTextClolr(TimePicker picker) {Resources system = Resources.getSystem();int hourId = system.getIdentifier("hour", "id", "android");//小时int minuteId = system.getIdentifier("minute", "id", "android");//分钟int dividerId = system.getIdentifier("divider", "id", "android");//冒号NumberPicker hourPicker = (NumberPicker) picker.findViewById(hourId);NumberPicker minutePicker = (NumberPicker) picker.findViewById(minuteId);TextView divider = (TextView) picker.findViewById(dividerId);final int color = mContext.getResources().getColor(android.R.color.white);   //要设置的颜色setTimePickerLoopColor(hourPicker, color);setTimePickerLoopColor(minutePicker, color);divider.setTextColor(color);}private void setTimePickerLoopColor(NumberPicker number_picker, int color) {final int count = number_picker.getChildCount();for (int i = 0; i < count; i++) {View child = number_picker.getChildAt(i);try {Field wheelpaint_field = number_picker.getClass().getDeclaredField("mSelectorWheelPaint");wheelpaint_field.setAccessible(true);((Paint) wheelpaint_field.get(number_picker)).setColor(color);((EditText) child).setTextColor(color);number_picker.invalidate();} catch (NoSuchFieldException e) {Log.w("setColor", e);} catch (IllegalAccessException e) {Log.w("setColor", e);} catch (IllegalArgumentException e) {Log.w("setColor", e);}}}/*** 初始化小时的范围*/private String[] initHourRange() {mStartHour = Integer.parseInt(DateUtils.getTimeOfHour());//只显示的小时列表if (mStartHour < 8) {//从8点开始mStartHour = 8;}List<String> hours = new ArrayList<>();for (int i = mStartHour; i < 24; i++) {hours.add(String.format("%d", i));}return hours.toArray(new String[hours.size()]);}/*** 得到timePicker里面的android.widget.NumberPicker组件* (有两个android.widget.NumberPicker组件--hour,minute)** @param viewGroup* @return*/private List<NumberPicker> findNumberPicker(ViewGroup viewGroup) {List<NumberPicker> npList = new ArrayList<>();View child;if (null != viewGroup) {for (int i = 0; i < viewGroup.getChildCount(); i++) {child = viewGroup.getChildAt(i);if (child instanceof NumberPicker) {npList.add((NumberPicker) child);} else if (child instanceof LinearLayout) {List<NumberPicker> result = findNumberPicker((ViewGroup) child);if (result.size() > 0) {return result;}}}}return npList;}/*** 隐藏TimePicker 的中间分割线** @param numberPicker*/private void hideSpinner(NumberPicker numberPicker) {try {Field dividerField = numberPicker.getClass().getDeclaredField("mSelectionDivider");dividerField.setAccessible(true);ColorDrawable colorDrawable = new ColorDrawable(80000000);dividerField.set(numberPicker, colorDrawable);numberPicker.invalidate();} catch (NoSuchFieldException | IllegalAccessException | IllegalArgumentException e) {LogUtils.w("setNumberPickerTxtClr", e);}}/*** 取出小时数** @param time 13:00* @return 13*/private int getHour(String time) {int hour = 0;if (!StringUtils.isEmpty(time)) {String substring = time.substring(0, 2);hour = Integer.parseInt(substring);}return hour;}/*** 取出分钟** @param time 13:00* @return 0*/private int getMinute(String time) {int minute = 0;if (!StringUtils.isEmpty(time)) {if (time.equals("0") || time.equals("00")) {return 0;} else {int pos = time.indexOf(TIME_SPACING);minute = Integer.parseInt(time.substring(pos + 1)) / FIFTEEN;}}return minute;}/*** 格式化时间** @param hour:21* @param minute:0* @return 21:00*/private String formateTime(int hour, int minute) {String sHour = hour + mStartHour < 10 ? ("0" + hour + mStartHour) : String.format("%d", hour + mStartHour);String sMinute = minute * 15 < 10 ? ("0" + minute * 15) : String.format("%d", minute * 15);return String.format("%s:%s", sHour, sMinute);}/*** 关闭弹窗*/public void closeDialog() {dialog.dismiss();}

 3.工具类:DateUtils.java  部分代码

    /*** 获取自定义格式时间** @param format 格式:yyyy年、MM月、dd日、HH小时、mm分钟、ss秒* @return*/public static String getCustomTime(String format) {Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+8:00"));SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.US);return sdf.format(cal.getTime());}/*** 得到当前时间 - 小时** @return HH:mm:ss*/public static String getTimeOfHour() {return getCustomTime("HH");}/*** 得到当前时间 - 分钟** @return HH:mm:ss*/public static String getTimeOfMinutes() {return getCustomTime("mm");}

 

4. 调用方法

    @Overrideprotected void initData() {int hour = Integer.parseInt(DateUtils.getTimeOfHour()) + 1;//初始化,开始小时=当前小时+1if (hour < 8) {//约派最早时间从8点开始hour = 8;}String leftTime1 = hour + TIME_HOUR;String rightTime1 = (hour + 1) + TIME_HOUR;timeView1.setText(leftTime1 + TIME_FORMAT + rightTime1);//初始化显示showTimerScheduleDialog(timeView1);}/*** 显示预约时间弹窗*/private void showTimerScheduleDialog(TextView view) {String text = view.getText().toString();TimerScheduleDialog dialog = new TimerScheduleDialog(this, text);dialog.setDialogOnClickListener(new TimerScheduleDialog.confirmButtonClick() {@Overridepublic void confirmScheduleClick(String pickTime) {view.setText(pickTime);dialog.closeDialog();}});dialog.show();}

 

ending。。。。

 

 

自定义时间(小时:分钟)选择器

要实现效果如下:

1. 24小时制,小时最早时间为8点,当前小时之前的不显示;

2. 分钟间隔15分钟,仅支持0、15、30、45 分钟时间。

3. 开始时间大于当前时间,结束时间与开始时间差15分钟到3小时

1.布局 :dialog_comlib_schedule_time.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android=""android:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/Color_M_opacity"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:orientation="vertical"><RelativeLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginBottom="10dp"android:layout_marginLeft="15dp"android:layout_marginTop="20dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentLeft="true"android:text="@string/comlib_delivery_setting_time"android:textColor="@color/Color_V"android:textSize="18sp" /><ImageViewandroid:id="@+id/close"android:layout_width="14dp"android:layout_height="14dp"android:layout_centerVertical="true"android:layout_alignParentRight="true"android:layout_marginRight="16dp"android:gravity="center"android:src="@drawable/ic_comlib_cancle" /></RelativeLayout><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_marginBottom="14dp"android:layout_marginLeft="15dp"android:text="@string/comlib_delivery_time_range"android:textColor="@color/cutlineColor"android:textSize="14sp" /></LinearLayout><include layout="@layout/include_comlib_line_horizontal" /><LinearLayoutandroid:layout_width="match_parent"android:layout_height="198dp"android:orientation="horizontal"><TimePickerandroid:id="@+id/tp_left"android:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"android:timePickerMode="spinner"android:layout_gravity="center_vertical" /><Viewandroid:id="@+id/line_v"android:layout_width="1dp"android:layout_height="74dp"android:layout_gravity="center"android:background="@drawable/ic_line_vertical" /><TimePickerandroid:id="@+id/tp_right"android:layout_width="0dp"android:layout_weight="1"android:layout_height="match_parent"android:timePickerMode="spinner"android:layout_gravity="center_vertical" /></LinearLayout></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:orientation="vertical"><Buttonandroid:id="@+id/btn_confirm"android:layout_width="match_parent"android:layout_height="wrap_content"android:background="@color/Color_Yellow"android:gravity="center"android:text="@string/comlib_confirm"android:textSize="18sp"android:textStyle="bold" /></LinearLayout></LinearLayout>

2.  核心代码:TimerScheduleDialog.java

public class TimerScheduleDialog {public static final int FIFTEEN = 15;private Context mContext;private AlertDialog dialog;private TimePicker tpLeft;private TimePicker tpRight;private Button btnConfirm;private ImageView ivClose;private confirmButtonClick confirmClick;private View dialogView;private String pickText;private String leftTime;private String rightTime;private int mStartHour = 8;/*** 间隔15的数组,用来表示可设置的分钟值*/private String[] minute = new String[]{"00", "15", "30", "45"};public TimerScheduleDialog(@NonNull Context context, String text) {this.mContext = context;this.pickText = text;this.leftTime = text.substring(0, 5);this.rightTime = text.substring(text.length() - 5);}/*** 初始化时间显示*/private void initScheduleTime() {if (StringUtils.isEmpty(leftTime) || NULL_TIME.equals(leftTime)) {int hour = Integer.parseInt(DateUtils.getTimeOfHour()) + 1;//没有初始化,开始小时=当前小时+1leftTime = hour + TIME_HOUR;setCurTimerPick(tpLeft, hour - mStartHour, 0);} else {setCurTimerPick(tpLeft, getHour(leftTime) - mStartHour, getMinute(leftTime));}if (StringUtils.isEmpty(rightTime) || NULL_TIME.equals(rightTime)) {int hour = Integer.parseInt(DateUtils.getTimeOfHour()) + 2;//没有初始化,开始小时=当前小时+2rightTime = hour + TIME_HOUR;setCurTimerPick(tpRight, hour - mStartHour, 0);} else {setCurTimerPick(tpRight, getHour(rightTime) - mStartHour, getMinute(rightTime));}}/*** 显示时间、分钟** @param picker* @param hour* @param minute*/private void setCurTimerPick(TimePicker picker, int hour, int minute) {picker.setCurrentHour(hour);picker.setCurrentMinute(minute);}public void show() {initDialog();initView();initListener();initScheduleTime();}private void initDialog() {if (dialog != null) {return;}LayoutInflater inflater = LayoutInflater.from(mContext);dialogView = inflater.inflate(R.layout.dialog_comlib_schedule_time, null);dialog = new AlertDialog.Builder(mContext, R.style.ComLib_Dialog).create();dialog.setCancelable(true);dialog.show();Window window = dialog.getWindow();window.setContentView(dialogView);window.setGravity(Gravity.BOTTOM);window.setWindowAnimations(R.style.comlib_popup_anim_bottom_style);WindowManager.LayoutParams params = window.getAttributes();params.width = WindowManager.LayoutParams.MATCH_PARENT;params.height = WindowManager.LayoutParams.WRAP_CONTENT;window.setAttributes(params);}/*** 初始化时间选择器显示*/private void initView() {tpLeft = (TimePicker) dialogView.findViewById(R.id.tp_left);initTimePicker(tpLeft);tpRight = (TimePicker) dialogView.findViewById(R.id.tp_right);initTimePicker(tpRight);btnConfirm = (Button) dialogView.findViewById(R.id.btn_confirm);ivClose = (ImageView) dialogView.findViewById(R.id.close);}/*** 初始化listener*/private void initListener() {tpLeft.setOnTimeChangedListener((view1, hourOfDay, minute)-> leftTime = formateTime(hourOfDay, minute));tpRight.setOnTimeChangedListener((view12, hourOfDay, minute)-> rightTime = formateTime(hourOfDay, minute));btnConfirm.setOnClickListener(v -> checkPickTime());ivClose.setOnClickListener(v -> dialog.dismiss());}/*** 校验选择时间*/private void checkPickTime() {if (confirmClick != null) {if (comparePickTime()) {pickText = leftTime + TIME_FORMAT + rightTime;confirmClick.confirmScheduleClick(pickText);} else {ToastUtils.show(R.string.comlib_delivery_time_range_toast);}}}/*** 比较选择的时间大小,左边小于右边*/private boolean comparePickTime() {int leftTime = (tpLeft.getCurrentHour() + mStartHour) * 60 + tpLeft.getCurrentMinute() * 15;int rightTime = (tpRight.getCurrentHour() + mStartHour) * 60 + tpRight.getCurrentMinute() * 15;int curTime = Integer.parseInt(DateUtils.getTimeOfHour()) * 60 + Integer.parseInt(DateUtils.getTimeOfMinutes());int differ = rightTime - leftTime;if (leftTime > curTime && differ >= 15 && differ <= 180) {//在15分钟到3小时之间,且左边的时间要大于当前时间return true;} else {return false;}}public void setDialogOnClickListener(confirmButtonClick buttonClick) {this.confirmClick = buttonClick;}public interface confirmButtonClick {void confirmScheduleClick(String pickTime);}/*** 初始化 时间选择器为24小时制* 设置 分钟为15min 间隔** @param picker*/private void initTimePicker(TimePicker picker) {picker.setIs24HourView(true);setNumberPickerTextSize(picker);setTimePickerTextClolr(picker);}/*** 查找timePicker里面的android.widget.NumberPicker组件* 并对其进行时间间隔设置** @param viewGroup TimePicker timePicker*/private void setNumberPickerTextSize(ViewGroup viewGroup) {List<NumberPicker> npList = findNumberPicker(viewGroup);String[] arrHours = initHourRange();if (null != npList) {for (NumberPicker mMinuteSpinner : npList) {hideSpinner(mMinuteSpinner);if (mMinuteSpinner.toString().contains("id/minute")) {//对分钟进行间隔设置mMinuteSpinner.setMinValue(0);mMinuteSpinner.setMaxValue(minute.length - 1);mMinuteSpinner.setDisplayedValues(minute);  //这里的minute是一个String数组,就是要显示的分钟值}if (mMinuteSpinner.toString().contains("id/hour")) {//对小时进行间隔设置mMinuteSpinner.setMinValue(0);mMinuteSpinner.setMaxValue(arrHours.length - 1);mMinuteSpinner.setDisplayedValues(arrHours);  //这里的hours是一个String数组,就是要显示的小时值}}}}/*** 初始化时间选择器颜色*/private void setTimePickerTextClolr(TimePicker picker) {Resources system = Resources.getSystem();int hourId = system.getIdentifier("hour", "id", "android");//小时int minuteId = system.getIdentifier("minute", "id", "android");//分钟int dividerId = system.getIdentifier("divider", "id", "android");//冒号NumberPicker hourPicker = (NumberPicker) picker.findViewById(hourId);NumberPicker minutePicker = (NumberPicker) picker.findViewById(minuteId);TextView divider = (TextView) picker.findViewById(dividerId);final int color = mContext.getResources().getColor(android.R.color.white);   //要设置的颜色setTimePickerLoopColor(hourPicker, color);setTimePickerLoopColor(minutePicker, color);divider.setTextColor(color);}private void setTimePickerLoopColor(NumberPicker number_picker, int color) {final int count = number_picker.getChildCount();for (int i = 0; i < count; i++) {View child = number_picker.getChildAt(i);try {Field wheelpaint_field = number_picker.getClass().getDeclaredField("mSelectorWheelPaint");wheelpaint_field.setAccessible(true);((Paint) wheelpaint_field.get(number_picker)).setColor(color);((EditText) child).setTextColor(color);number_picker.invalidate();} catch (NoSuchFieldException e) {Log.w("setColor", e);} catch (IllegalAccessException e) {Log.w("setColor", e);} catch (IllegalArgumentException e) {Log.w("setColor", e);}}}/*** 初始化小时的范围*/private String[] initHourRange() {mStartHour = Integer.parseInt(DateUtils.getTimeOfHour());//只显示的小时列表if (mStartHour < 8) {//从8点开始mStartHour = 8;}List<String> hours = new ArrayList<>();for (int i = mStartHour; i < 24; i++) {hours.add(String.format("%d", i));}return hours.toArray(new String[hours.size()]);}/*** 得到timePicker里面的android.widget.NumberPicker组件* (有两个android.widget.NumberPicker组件--hour,minute)** @param viewGroup* @return*/private List<NumberPicker> findNumberPicker(ViewGroup viewGroup) {List<NumberPicker> npList = new ArrayList<>();View child;if (null != viewGroup) {for (int i = 0; i < viewGroup.getChildCount(); i++) {child = viewGroup.getChildAt(i);if (child instanceof NumberPicker) {npList.add((NumberPicker) child);} else if (child instanceof LinearLayout) {List<NumberPicker> result = findNumberPicker((ViewGroup) child);if (result.size() > 0) {return result;}}}}return npList;}/*** 隐藏TimePicker 的中间分割线** @param numberPicker*/private void hideSpinner(NumberPicker numberPicker) {try {Field dividerField = numberPicker.getClass().getDeclaredField("mSelectionDivider");dividerField.setAccessible(true);ColorDrawable colorDrawable = new ColorDrawable(80000000);dividerField.set(numberPicker, colorDrawable);numberPicker.invalidate();} catch (NoSuchFieldException | IllegalAccessException | IllegalArgumentException e) {LogUtils.w("setNumberPickerTxtClr", e);}}/*** 取出小时数** @param time 13:00* @return 13*/private int getHour(String time) {int hour = 0;if (!StringUtils.isEmpty(time)) {String substring = time.substring(0, 2);hour = Integer.parseInt(substring);}return hour;}/*** 取出分钟** @param time 13:00* @return 0*/private int getMinute(String time) {int minute = 0;if (!StringUtils.isEmpty(time)) {if (time.equals("0") || time.equals("00")) {return 0;} else {int pos = time.indexOf(TIME_SPACING);minute = Integer.parseInt(time.substring(pos + 1)) / FIFTEEN;}}return minute;}/*** 格式化时间** @param hour:21* @param minute:0* @return 21:00*/private String formateTime(int hour, int minute) {String sHour = hour + mStartHour < 10 ? ("0" + hour + mStartHour) : String.format("%d", hour + mStartHour);String sMinute = minute * 15 < 10 ? ("0" + minute * 15) : String.format("%d", minute * 15);return String.format("%s:%s", sHour, sMinute);}/*** 关闭弹窗*/public void closeDialog() {dialog.dismiss();}

 3.工具类:DateUtils.java  部分代码

    /*** 获取自定义格式时间** @param format 格式:yyyy年、MM月、dd日、HH小时、mm分钟、ss秒* @return*/public static String getCustomTime(String format) {Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT+8:00"));SimpleDateFormat sdf = new SimpleDateFormat(format, Locale.US);return sdf.format(cal.getTime());}/*** 得到当前时间 - 小时** @return HH:mm:ss*/public static String getTimeOfHour() {return getCustomTime("HH");}/*** 得到当前时间 - 分钟** @return HH:mm:ss*/public static String getTimeOfMinutes() {return getCustomTime("mm");}

 

4. 调用方法

    @Overrideprotected void initData() {int hour = Integer.parseInt(DateUtils.getTimeOfHour()) + 1;//初始化,开始小时=当前小时+1if (hour < 8) {//约派最早时间从8点开始hour = 8;}String leftTime1 = hour + TIME_HOUR;String rightTime1 = (hour + 1) + TIME_HOUR;timeView1.setText(leftTime1 + TIME_FORMAT + rightTime1);//初始化显示showTimerScheduleDialog(timeView1);}/*** 显示预约时间弹窗*/private void showTimerScheduleDialog(TextView view) {String text = view.getText().toString();TimerScheduleDialog dialog = new TimerScheduleDialog(this, text);dialog.setDialogOnClickListener(new TimerScheduleDialog.confirmButtonClick() {@Overridepublic void confirmScheduleClick(String pickTime) {view.setText(pickTime);dialog.closeDialog();}});dialog.show();}

 

ending。。。。

 

 

发布评论

评论列表 (0)

  1. 暂无评论