95 lines
3.7 KiB
Java
95 lines
3.7 KiB
Java
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;
|
|
}
|
|
}
|
|
|