2011-02-04 18 views
6

¿Cómo puedo configurar el formato del cronómetro Android en HH: MM: SS ??Android Cronómetro formato

+1

posible duplicado de [cómo cambiar el formato del cronómetro?] (http://stackoverflow.com/questions/4152569/how-to-change-format-of-chronometer) –

Respuesta

14

primera propuesta - dejó sólo para la historia

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

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


Edición - Esto no funciona en absoluto ! Lo siento por la respuesta demasiado rápido, no probado ... Aquí es algo que funciona:

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

Está agregando el desplazamiento de tiempo al tiempo formateado, ¿cómo puedo evitarlo? – dgngulcan

8

Parece que la gente que ha publicado las respuestas anteriores ni siquiera probar lo que sugirieron. Simplemente no funciona de la manera que lo describieron.
Consulte how to change format of chronometer? para obtener respuestas más apropiadas.

+0

Gracias! Y tienes razón, la respuesta no había sido probada. Lo curioso es que fue aceptado ... –

6

Después de algunas pruebas, se me ocurrió este código. No está completamente probado, pero me puede proporcionar más información si

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

me llama a este método en el método onCreate() por ejemplo.

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

Volveré en un día para verificar si funciona o si necesita ser llamado también después de que cambie el tamaño del texto. Si usted es una persona precavida le sugiero que lo haga en el mismo contexto con c.start() y c.stop()

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

Esto funciona:

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

encontrado una solución mejor, sin asignación de memoria para la cadena cada segundo :

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