Search code examples
androidtimepicker

Custom time picker in Android


I have code to display time picker dialog, and I've made a filter setMinTime and setMaxTime, but I want to filter in more detail. How can I make filter for today and other date in time picker?

Filter for today:

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

Filter for other day:

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

Complete code:

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");
}

Solution

  • First you need to check selected date from DatePicker is today or not and send today date boolean flag to timePicker method as below :

    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();
    

    Use that today date boolean flag parameter into timePicker method as below to set min and max time as below :

    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");
        }