2011-02-04 30 views
6

Jak ustawić format Chronometr na Androida na GG: MM: SS?Format chronometru Android

+1

możliwe duplikat [jak zmienić format chronometr?] (http://stackoverflow.com/questions/4152569/how-to-change-format-of-chronometer) –

Odpowiedz

14

Pierwsza propozycja - w lewo tylko dla historii

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

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


Edit - To nie działa w ogóle! Przepraszam za zbyt szybko, niesprawdzonych odpowiedź ... Oto coś, co działa:

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)); 
    } 
}); 
+1

Dodaje przesunięcie czasowe do sformatowanego czasu, jak mogę go uniknąć? – dgngulcan

8

Wydaje ludzi, którzy napisali wcześniejsze odpowiedzi nawet nie próbować tego, co zaproponował. Po prostu nie działa tak, jak opisali.
Aby uzyskać bardziej odpowiednie odpowiedzi, patrz how to change format of chronometer?.

+0

Dzięki! I masz rację, odpowiedź nie została przetestowana. Ciekawe, że został zaakceptowany ... –

6

Po kilku testach wymyśliłem ten kod. To nie jest w pełni przetestowany, ale można podać mi więcej informacji, jeśli

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

nazwałem tę metodę w onCreate() metody np.

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

Będę z powrotem w ciągu dnia, aby sprawdzić, czy działa lub musi zostać wywołany również po zmianie rozmiaru tekstu. Jeżeli jesteś precautious osoba I sugerują, że nazywają go w tym samym kontekście z c.start() i c.stop()

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

to działa:

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

znaleźć lepsze rozwiązanie bez alokacji pamięci dla ciągu każdej sekundy :

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