package com.xscm.moduleutil.widget; import android.app.Dialog; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TabHost; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import com.google.android.material.bottomsheet.BottomSheetDialogFragment; import com.xscm.moduleutil.R; import java.util.Calendar; import java.util.Date; public class DoubleTimePickerBottomSheet extends BottomSheetDialogFragment { private OnTimeRangeSelectedListener listener; public interface OnTimeRangeSelectedListener { void onTimeRangeSelected(Date startDate, Date endDate); } public void setOnTimeRangeSelectedListener(OnTimeRangeSelectedListener listener) { this.listener = listener; } @NonNull @Override public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { return new CustomBottomSheetDialog(requireContext()); } @NonNull @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.dialog_double_time_picker, container, false); // 初始化 TabHost TabHost tabHost = view.findViewById(R.id.tabHost); tabHost.setup(); tabHost.addTab(tabHost.newTabSpec("start").setIndicator("开始时间").setContent(R.id.start_time_tab)); tabHost.addTab(tabHost.newTabSpec("end").setIndicator("结束时间").setContent(R.id.end_time_tab)); // 初始化 Wheel Views WheelDatePicker wheelStartDate = view.findViewById(R.id.wheel_start_date); WheelTimePicker wheelStartTime = view.findViewById(R.id.wheel_start_time); WheelDatePicker wheelEndDate = view.findViewById(R.id.wheel_end_date); WheelTimePicker wheelEndTime = view.findViewById(R.id.wheel_end_time); // 默认设置当前时间 Calendar startCal = Calendar.getInstance(); wheelStartDate.init(startCal.get(Calendar.YEAR), startCal.get(Calendar.MONTH), startCal.get(Calendar.DAY_OF_MONTH)); wheelStartTime.init(startCal.get(Calendar.HOUR_OF_DAY), startCal.get(Calendar.MINUTE),startCal.get(Calendar.SECOND)); // 设置默认结束时间略晚于开始时间 Calendar endCal = (Calendar) startCal.clone(); endCal.add(Calendar.HOUR, 1); wheelEndDate.init(endCal.get(Calendar.YEAR), endCal.get(Calendar.MONTH), endCal.get(Calendar.DAY_OF_MONTH)); wheelEndTime.init(endCal.get(Calendar.HOUR_OF_DAY), endCal.get(Calendar.MINUTE),endCal.get(Calendar.SECOND)); // 取消按钮 view.findViewById(R.id.btn_cancel).setOnClickListener(v -> dismiss()); // 确定按钮 view.findViewById(R.id.btn_sure).setOnClickListener(v -> { Calendar start = Calendar.getInstance(); start.set(wheelStartDate.getYear(), wheelStartDate.getMonth(), wheelStartDate.getDay(), wheelStartTime.getHour(), wheelStartTime.getMinute(), wheelStartTime.getSecond()); Calendar end = Calendar.getInstance(); end.set(wheelEndDate.getYear(), wheelEndDate.getMonth(), wheelEndDate.getDay(), wheelEndTime.getHour(), wheelEndTime.getMinute(), wheelEndTime.getSecond()); if (end.getTime().before(start.getTime())) { Toast.makeText(requireContext(), "结束时间不能早于开始时间", Toast.LENGTH_SHORT).show(); return; } if (listener != null) { listener.onTimeRangeSelected(start.getTime(), end.getTime()); } dismiss(); }); return view; } }