tags:

views:

353

answers:

4

Hi,

Can I control the Android TimePicker view to just show the minutes to 15 minutes interval?

Meaning if it's 12:28 now, show 12:30 and clicking the + and - button will increment and decrement by 15?

Thank you,

Tee

+1  A: 

You have to write your own TimePicker. Not sure if you can extend the existing TimePicker and handle the button events on your own.

BrennaSoft
+1  A: 

Hi,

I think I figured it out. Might be ghetto way but...

Here is what I did.

start_time.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {

        public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
            updateDisplay(hourOfDay, minute);
        }
    });

private void updateDisplay(int hourOfDay, int minute) { // do calculation of next time // nextTime = calculation of next time;

            // the processed boolean is to prevent infinite loop
    if (!processed) {
        start_time.setCurrentMinute(nextTime);  
                    processed = true;
    } else {
                    processed = false;
            }
}
teepusink
A: 

The following worked for me.

First, in onCreate:

pickStartTime = (TimePicker)findViewById(R.id.StartTime);
pickStartTime.setOnTimeChangedListener(mStartTimeChangedListener);

Set the OnTimeChangedListener:

private TimePicker.OnTimeChangedListener mStartTimeChangedListener =
    new TimePicker.OnTimeChangedListener() {

    public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
        updateDisplay(view, startDate, hourOfDay, minute);          
    }
};

Null OnTimeChangedListener (explained in comments in updateDisplay below):

private TimePicker.OnTimeChangedListener mNullTimeChangedListener =
    new TimePicker.OnTimeChangedListener() {

    public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {

    }
};

private void updateDisplay(TimePicker timePicker, Date date, int hourOfDay, int minute) { 

    // do calculation of next time 
    int nextMinute = 0;     
    if (minute >= 45 && minute <= 59)
        nextMinute = 45;
    else if(minute >= 30)
        nextMinute = 30;
    else if(minute >= 15)
        nextMinute = 15;
    else if(minute > 0)
        nextMinute = 0;
    else {          
        nextMinute = 45;
    }

    // remove ontimechangedlistener to prevent stackoverflow/infinite loop
    timePicker.setOnTimeChangedListener(mNullTimeChangedListener);

    // set minute
    timePicker.setCurrentMinute(nextMinute);

    // hook up ontimechangedlistener again
    timePicker.setOnTimeChangedListener(mStartTimeChangedListener);

    // update the date variable for use elsewhere in code
    date.setMinutes(nextMinute);  
}
Andrew Dyer
I just found a problem with my logic for determining the minute value. With the code above, the "+" button doesn't work. I'll post the updated code when I get it fixed.
Andrew Dyer