Altaf
Altaf

Reputation: 5170

Android Chronometer format

How can I set Android Chronometer format to HH:MM:SS??

Upvotes: 12

Views: 30391

Answers (5)

MLS
MLS

Reputation: 237

found a better solution with no memory allocation for the String every second:

 c.setFormat("00:%s");
 c.setOnChronometerTickListener(new OnChronometerTickListener() {
        public void onChronometerTick(Chronometer c) {
            long elapsedMillis = SystemClock.elapsedRealtime() -c.getBase();
            if(elapsedMillis > 3600000L){
                c.setFormat("0%s");
            }else{
                c.setFormat("00:%s");
            }
        }
 });

Upvotes: 4

user2640195
user2640195

Reputation: 41

This works:

Chronometer chronometer;
chronometer.setOnChronometerTickListener(new OnChronometerTickListener() {
    public void onChronometerTick(Chronometer c) {              
        int cTextSize = c.getText().length();
        if (cTextSize == 5) {
            chronometer.setText("00:"+c.getText().toString());
        } else if (cTextSize == 7) {
            chronometer.setText("0"+c.getText().toString());
        }
    }
});

Upvotes: 4

a14m
a14m

Reputation: 8055

After some testing, I came up with this code. It's not fully tested but you can provide me with more info if you

private void formatChronometerText(Chronometer c) {
    int cTextSize = c.getText().length();
    if (cTextSize == 5) {
        breakingTime.setFormat("00:%s");
    } else if (cTextSize == 7) {
        breakingTime.setFormat("0%s");
    } else if (cTextSize == 8) {
        breakingTime.setFormat("%s");
    }
}

I called this method in the onCreate() method eg.

Chronometer c = ...
...
formatChronometerText(c);
c.setText("00:00:00");

I'll be back in a day to verify if it works or it needs to be called also after the size of the text changes. If you are a precautious person I suggest that you call it in the same context with c.start() and c.stop()

if(ticking){
    c.stop();
    formatChronometerText(c);
} else {
    formatChronometerText(c);
    c.start()
}

Upvotes: 6

Stéphane
Stéphane

Reputation: 6905

first proposal - left only for history

Chronometer c;
...
c.setFormat("HH:MM:SS");

see http://developer.android.com/reference/android/widget/Chronometer.html#setFormat%28java.lang.String%29


Edit - This does not work at all! Sorry for the too fast, untested answer... Here is something that works:

Chronometer c;
...    
c.setOnChronometerTickListener(new OnChronometerTickListener() {
    public void onChronometerTick(Chronometer cArg) {
        long t = SystemClock.elapsedRealtime() - cArg.getBase();
        cArg.setText(DateFormat.format("kk:mm:ss", t));
    }
});

Upvotes: 21

Paulo Matuki
Paulo Matuki

Reputation: 89

It seems people who posted the previous answers did not even try what they suggested. It simply does not work the way they described.
Refer to how to change format of chronometer? for more appropriate answers.

Upvotes: 8

Related Questions