package com.rehome.meetingbook.weiget; import android.app.Dialog; import android.content.Context; import android.view.Display; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.DatePicker; import android.widget.TextView; import android.widget.TimePicker; import com.rehome.meetingbook.R; import java.text.SimpleDateFormat; import java.util.Calendar; /** * Create By HuangWenFei * 创建日期:2022-12-09 15:51 * 描述:时间日期选择器 */ public class DateTimeMinutePickDialog extends Dialog implements View.OnClickListener, DatePicker.OnDateChangedListener, TimePicker.OnTimeChangedListener { private final TextView tv_dialog_title; private TextView tv_dialog_msg; private final TextView tv_dialog_commit; private final TextView tv_dialog_cancel; private final View lay_dialog_title; private final View lay_dialog_cancel; private View lay_dialog_commit; private final DateTimeMinutePickDialog.CommitClickListener commitClickListener; private final DatePicker datePicker; private final TimePicker timePicker; private String dateTime, outPutDateTime, outPutDateTime1, outPutDateTime2; private Calendar calendar = Calendar.getInstance(); private final Calendar nowCalendar = Calendar.getInstance();//现在时间 private Calendar tempCalendar = Calendar.getInstance();//历史时间 private final SimpleDateFormat simpleDateFormat1 = new SimpleDateFormat("yyyy年MM月dd日 HH:mm"); private final SimpleDateFormat simpleDateFormat2 = new SimpleDateFormat("yyyy-MM-dd HH:mm"); private final SimpleDateFormat simpleDateFormat3 = new SimpleDateFormat("yyyy-MM-dd"); private final SimpleDateFormat simpleDateFormat4 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public DateTimeMinutePickDialog(Context context, DateTimeMinutePickDialog.CommitClickListener commitClickListener) { super(context); this.commitClickListener = commitClickListener; requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setBackgroundDrawableResource(android.R.color.transparent); setContentView(R.layout.layout_datetime_dialog); Window window = getWindow(); WindowManager.LayoutParams lp = window.getAttributes(); lp.width = (getScreenWidth(context)) * 2 / 5; window.setGravity(Gravity.CENTER); lay_dialog_title = findViewById(R.id.lay_dialog_title); tv_dialog_title = findViewById(R.id.dialog_title); lay_dialog_cancel = findViewById(R.id.lay_dialog_cancel); // lay_dialog_commit = findViewById(R.id.lay_dialog_commit); tv_dialog_cancel = findViewById(R.id.dialog_cancel); tv_dialog_commit = findViewById(R.id.dialog_commit); datePicker = findViewById(R.id.datePicker); timePicker = findViewById(R.id.timePicker); if (calendar != null) { initDateTime(datePicker, timePicker, calendar); } timePicker.setIs24HourView(true); timePicker.setOnTimeChangedListener(this); tv_dialog_cancel.setOnClickListener(this); tv_dialog_commit.setOnClickListener(this); } public DateTimeMinutePickDialog(Context context, Calendar calendar,boolean isStartTime,DateTimeMinutePickDialog.CommitClickListener commitClickListener) { super(context); this.commitClickListener = commitClickListener; requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setBackgroundDrawableResource(android.R.color.transparent); setContentView(R.layout.layout_datetime_dialog); Window window = getWindow(); WindowManager.LayoutParams lp = window.getAttributes(); lp.width = (getScreenWidth(context)) * 2 / 5; window.setGravity(Gravity.CENTER); lay_dialog_title = findViewById(R.id.lay_dialog_title); tv_dialog_title = findViewById(R.id.dialog_title); lay_dialog_cancel = findViewById(R.id.lay_dialog_cancel); // lay_dialog_commit = findViewById(R.id.lay_dialog_commit); tv_dialog_cancel = findViewById(R.id.dialog_cancel); tv_dialog_commit = findViewById(R.id.dialog_commit); datePicker = findViewById(R.id.datePicker); timePicker = findViewById(R.id.timePicker); this.calendar=calendar; if (calendar != null) { if(isStartTime){ initDateTime(datePicker, timePicker, calendar,true); }else{ initDateTime(datePicker, timePicker, calendar,false); } } timePicker.setIs24HourView(true); timePicker.setOnTimeChangedListener(this); tv_dialog_cancel.setOnClickListener(this); tv_dialog_commit.setOnClickListener(this); } @Override public void onClick(View v) { if(v.getId()==R.id.dialog_cancel){ dismiss(); } if(v.getId()==R.id.dialog_commit){ commitClickListener.confirm(outPutDateTime, outPutDateTime1,outPutDateTime2,calendar); dismiss(); } } public void onTimeChanged(TimePicker view, int hourOfDay, int minute) { onDateChanged(null, 0, 0, 0); } /** * 时间改变时候回调 * * @param view * @param year 年 * @param monthOfYear 月 * @param dayOfMonth 日 */ public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth) { tempCalendar.set(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth(), timePicker.getCurrentHour(), timePicker.getCurrentMinute(),0); /** * 如果当前时间大于选择的时间,就重置时间 */ // if (nowCalendar.getTimeInMillis() > tempCalendar.getTimeInMillis()) { // changeDateTime(datePicker, timePicker, nowCalendar); // } else { calendar = tempCalendar; dateTime = simpleDateFormat1.format(calendar.getTime()); tv_dialog_title.setText(dateTime); outPutDateTime = simpleDateFormat2.format(calendar.getTime()); outPutDateTime1 = simpleDateFormat3.format(calendar.getTime()); outPutDateTime2 = simpleDateFormat4.format(calendar.getTime()); // } } /** * 改变时间 * * @param datePicker 日期选择控件 * @param timePicker 时间选择控件 * @param calendar 日历类 */ private void changeDateTime(DatePicker datePicker, TimePicker timePicker, Calendar calendar) { datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), this); //设置不显示年 if (datePicker != null) { ((ViewGroup) ((ViewGroup) datePicker.getChildAt(0)).getChildAt(0)).getChildAt(0).setVisibility(View.GONE); } tv_dialog_title.setText(simpleDateFormat1.format(calendar.getTime())); //设置显示时分 timePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY)); timePicker.setCurrentMinute(calendar.get(Calendar.MINUTE)); } /** * 初始化时间 * * @param datePicker 日期选择控件 * @param timePicker 时间选择控件 * @param calendar 日历类 */ private void initDateTime(DatePicker datePicker, TimePicker timePicker, Calendar calendar) { // calendar.add(Calendar.DATE, 1); datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), this); // 设置不显示年 if (datePicker != null) { ((ViewGroup) ((ViewGroup) datePicker.getChildAt(0)).getChildAt(0)).getChildAt(0).setVisibility(View.GONE); } calendar.set(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth(), timePicker.getCurrentHour(), timePicker.getCurrentMinute(),0); tv_dialog_title.setText(simpleDateFormat1.format(calendar.getTime())); //设置显示时分 timePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY)); timePicker.setCurrentMinute(calendar.get(Calendar.MINUTE)); tempCalendar = calendar; outPutDateTime = simpleDateFormat2.format(calendar.getTime()); outPutDateTime1 = simpleDateFormat3.format(calendar.getTime()); outPutDateTime2 = simpleDateFormat4.format(calendar.getTime()); } /** * 初始化时间 * * @param datePicker 日期选择控件 * @param timePicker 时间选择控件 * @param calendar 日历类 */ private void initDateTime(DatePicker datePicker, TimePicker timePicker, Calendar calendar,boolean isStartTime) { // calendar.add(Calendar.DATE, 1); datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), this); // 设置不显示年 if (datePicker != null) { ((ViewGroup) ((ViewGroup) datePicker.getChildAt(0)).getChildAt(0)).getChildAt(0).setVisibility(View.GONE); } if(isStartTime){ calendar.set(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth(), 9, 0,0); }else{ calendar.set(datePicker.getYear(), datePicker.getMonth(), datePicker.getDayOfMonth(), 16, 0,0); } tv_dialog_title.setText(simpleDateFormat1.format(calendar.getTime())); //设置显示时分 timePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY)); timePicker.setCurrentMinute(calendar.get(Calendar.MINUTE)); tempCalendar = calendar; outPutDateTime = simpleDateFormat2.format(calendar.getTime()); outPutDateTime1 = simpleDateFormat3.format(calendar.getTime()); outPutDateTime2 = simpleDateFormat4.format(calendar.getTime()); } public interface CommitClickListener { /** * @param outPutDate 精确到分 * @param outPutDate1 精确到天 * @param outPutDate2 精确到秒 */ void confirm(String outPutDate, String outPutDate1, String outPutDate2,Calendar calendarCallBack); } //获取屏幕宽度 public static int getScreenWidth(Context context) { WindowManager manager = (WindowManager) context .getSystemService(Context.WINDOW_SERVICE); Display display = manager.getDefaultDisplay(); return display.getWidth(); } }