Android 中的自定义时间选择器

Custom time picker in Android

我有显示时间选择器对话框的代码,并且我制作了过滤器 setMinTime 和 setMaxTime,但我想过滤得更详细。 我如何为今天和其他日期时间选择器制作过滤器?

过滤今天:

timepickerdialog.setMinTime(now.get(Calendar.HOUR_OF_DAY), 0, 0);
timepickerdialog.setMaxTime(16, 0, 0);

过滤其他日期:

timepickerdialog.setMinTime(8, 0, 0);
timepickerdialog.setMaxTime(16, 0, 0);

完整代码:

public void timePicker(){
    Calendar now = Calendar.getInstance();
    TimePickerDialog timepickerdialog = TimePickerDialog.newInstance(
            FormTestDrive.this,
            now.get(Calendar.HOUR_OF_DAY),
            now.get(Calendar.MINUTE),
            true);

    timepickerdialog.setMinTime(8, 0, 0);
    timepickerdialog.setMaxTime(16, 0, 0);

    timepickerdialog.setThemeDark(false);
    timepickerdialog.vibrate(false);
    timepickerdialog.dismissOnPause(false);

    timepickerdialog.show(getFragmentManager(), "Timepickerdialog");
}

首先,您需要检查 DatePicker 中选择的日期是否为今天,并将今天的日期布尔标志发送到 timePicker 方法,如下所示:

new DatePickerDialog(this, new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker datePicker, int year, int monthOfYear, int dayOfMonth) {
                Calendar selectedDate =  Calendar.getInstance();
                selectedDate.set(Calendar.YEAR,year);
                selectedDate.set(Calendar.MONTH,monthOfYear);
                selectedDate.set(Calendar.DAY_OF_MONTH,dayOfMonth);

                openTimePicker(DateUtils.isToday(selectedDate.getTimeInMillis()));

            }
        }, Calendar.getInstance().get(Calendar.YEAR),Calendar.getInstance().get(Calendar.MONTH),Calendar.getInstance().get(Calendar.DAY_OF_MONTH)).show();

将今天的日期布尔标志参数用于 timePicker 方法,如下所示设置最小和最大时间:

public void timePicker(boolean isTodayDate){
        int minHour = 8;
        int maxHour = 16;
        Calendar now = Calendar.getInstance();
        TimePickerDialog timepickerdialog = TimePickerDialog.newInstance(
                FormTestDrive.this,
                now.get(Calendar.HOUR_OF_DAY),
                now.get(Calendar.MINUTE),
                true);

        if(isTodayDate){
            if(now.get(Calendar.HOUR_OF_DAY)>8 && now.get(Calendar.HOUR_OF_DAY)<16){
                minHour = now.get(Calendar.HOUR_OF_DAY);
            }
        }

        timepickerdialog.setMinTime(minHour, 0, 0);
        timepickerdialog.setMaxTime(maxHour, 0, 0);

        timepickerdialog.setThemeDark(false);
        timepickerdialog.vibrate(false);
        timepickerdialog.dismissOnPause(false);

        timepickerdialog.show(getFragmentManager(), "Timepickerdialog");
    }