2010-11-11 7 views
14

Uno de mi problema es cambiar el formato del cronómetro en Android. tengo el problema de que el cronómetro muestra su hora en formato 00:00 y quiero que venga en formato 00:00:00. ¿Alguien sabe la respuesta?cómo cambiar el formato del cronómetro?

Respuesta

1

Estaba trabajando en un temporizador de cuenta atrás que usó este formato, pero fue para HH: MM: SS. Es eso lo que estás buscando o estás buscando MM: SS: milisegundos. Podría trabajar con este código y hacer que cuente desde 0 en lugar de hacia abajo. Aquí está el enlace - Formatting countdown timer with 00:00:00 not working. Displays 00:00:00 until paused then displays the time remaining y esto podría ayudar - Show milliseconds with Android Chronometer

+1

estoy buscando HH: MM: SS ......... cronómetro bt no lo demuestra cuando está en segundos o minutos las 00:00: 00 format.it solo muestra 00:00 cuando la cuenta atrás está en sec. o min. – Nikki

2

cronómetros método setFormat se utiliza para agregar texto con formato como:

"Tiempo% s desde el principio"

resultante

"Hora 00:00 desde el inicio"

En el cronómetro no puede seleccionar entre los formatos HH: MM: SS o MM: SS.

+0

Esto significa que no hay forma de que pueda establecer un formato cuyo resultado final sea "00:00:00" sin realizar algunas manipulaciones en 'ChronometerTickListener' como sugieren otras respuestas. no es así? –

16

Estaba lidiando con el mismo problema. La forma más fácil de lograr este objetivo sería ser de primer orden UPDATETEXT método del cronómetro, pero por desgracia, es un método privado por lo que he hecho esto de esta manera:

mChronometer.setText("00:00:00"); 
    mChronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() { 

     @Override 
     public void onChronometerTick(Chronometer chronometer) { 
      CharSequence text = chronometer.getText(); 
      if (text.length() == 5) { 
       chronometer.setText("00:"+text); 
      } else if (text.length() == 7) { 
       chronometer.setText("0"+text); 
      } 
     } 
    }); 

Sé que sería mejor escribir de encargo Reproductor pero para proyectos pequeños puede ser adecuado.

El formato de ajuste en el cronómetro permite formatear el texto que rodea el tiempo real y la hora se formatea utilizando DateUtils.formatElapsedTime.

Espero que ayude.

30

Aquí es una solución fácil e inteligente para el formato de hora 00:00:00 en cronómetro en Android

Chronometer timeElapsed = (Chronometer) findViewById(R.id.chronomete); 
timeElapsed.setOnChronometerTickListener(new OnChronometerTickListener(){ 
     @Override 
      public void onChronometerTick(Chronometer cArg) { 
      long time = SystemClock.elapsedRealtime() - cArg.getBase(); 
      int h = (int)(time /3600000); 
      int m = (int)(time - h*3600000)/60000; 
      int s= (int)(time - h*3600000- m*60000)/1000 ; 
      String hh = h < 10 ? "0"+h: h+""; 
      String mm = m < 10 ? "0"+m: m+""; 
      String ss = s < 10 ? "0"+s: s+""; 
      cArg.setText(hh+":"+mm+":"+ss); 
     } 
    }); 
    timeElapsed.setBase(SystemClock.elapsedRealtime()); 
    timeElapsed.start(); 
+2

Amigo, realmente muy buena solución. La forma más fácil que he visto;) –

+0

gracias por su idea, he editado su código un poco para mejorar el rendimiento aquí \t cArg.setText (String.format ("% 02d:% 02d:% 02d", h, m , s)); –

+1

¿hay alguna forma de hacer esto si el cronómetro está en un widget (widget de pantalla de inicio)? – ArJ

1
  You can use this code. Setting the format and removing it 


    //Removing the format (write this in oncreate) 
     if(mChronometerformat){ 
     mSessionTimeChro.setOnChronometerTickListener(new OnChronometerTickListener() { 
               @Override 
               public void onChronometerTick(Chronometer chronometer) { 
                if (chronometer.getText().toString() 
                  .equals("00:59:59")) 
                 chronometer.setFormat(null); 

              } 
             });} 


    // Setting the format 


mSessionTimeChro.setBase(SystemClock.elapsedRealtime()); 
       if (diffHours == 0) { 
        mSessionTimeChro.setFormat("00:%s"); 
        mChronometerformat = true; 
       } 
       mSessionTimeChro.start(); 
0

¿Por qué no utilizar la clase Date ??

timeElapsed.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() { 
    @Override 
    public void onChronometerTick(Chronometer cArg) { 
     long time = SystemClock.elapsedRealtime() - cArg.getBase(); 
     Date date = new Date(time); 
     DateFormat formatter = new SimpleDateFormat("HH:mm:ss"); 
     String dateFormatted = formatter.format(date); 
     cArg.setText(dateFormatted); 
    } 
}); 

simple y limpia

+0

La clase Chronometer espera un patrón específico en su método setText (String). Su código generará una excepción. –

+0

@FranziskusKarsunke ¿Has verificado este patrón? ** Por defecto, mostrará el valor del temporizador actual en el formato "MM: SS" o "H: MM: SS", o puede usar setFormat (String) para formatear el valor del temporizador en una cadena arbitraria. ** – Marurban

+1

Esto funciona, pero es más eficiente trabajar con el tiempo como un objeto largo en lugar de crear un nuevo objeto Date y DateFormat cada segundo. – k2col

Cuestiones relacionadas