2010-11-11 14 views
14

Jednym z moich problemów jest zmiana formatu chronometru w systemie Android. Mam problem z tym, że chronometr pokazuje swój czas w formacie 00:00 i chcę, żeby wszedł w formacie 00:00:00. Czy ktoś zna odpowiedź?jak zmienić format chronometru?

Odpowiedz

1

Pracowałem na czasomierzu, który używał tego formatu, ale był dla HH: MM: SS. Czy tego szukasz lub szukasz MM: SS: milisekundy. Możesz pracować z tym kodem i sprawić, że będzie on liczony od 0 zamiast w dół. Oto link - Formatting countdown timer with 00:00:00 not working. Displays 00:00:00 until paused then displays the time remaining a to może pomóc - Show milliseconds with Android Chronometer

+1

im szuka HH: MM: SS ......... bt chronometr nie pokazuje, kiedy to w ciągu kilku sekund lub minut a 00:00: 00 format.it pokazuje tylko 00:00, kiedy odliczanie jest w sekundach. lub min. – Nikki

2

Chronometry metoda setFormat służy do dodawania sformatowany tekst jak:

"Time% s od początku"

wynikające

"Czas 00:00 od rozpoczęcia"

W Chronometrze nie można wybierać pomiędzy formatami HH: MM: SS lub MM: SS.

+0

Oznacza to, że nie ma możliwości ustawienia formatu, którego wynikiem końcowym jest "00:00:00" bez wykonywania pewnych czynności w "ChronometerTickListener", jak sugerują inne odpowiedzi. prawda? –

16

Miałem do czynienia z tym samym problemem. Najprostszym sposobem osiągnięcia tego celu byłoby przesłanianie updateText metodę chronometr, ale niestety jest to prywatna metoda więc zrobiłem to w ten sposób:

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

wiem, że lepiej byłoby napisać niestandardowy widget ale dla małego projektu może być odpowiedni.

Format ustawienia chronometru umożliwia sformatowanie tekstu otaczającego aktualny czas i godzinę w formacie DateUtils.formatElapsedTime.

Nadzieję, że pomaga.

30

Oto proste i inteligentne rozwiązanie dla formatu czasu 00:00:00 w chronometru w 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

Stary, naprawdę fajne rozwiązanie. Najłatwiejszy sposób, jaki kiedykolwiek widziałem;) –

+0

dzięki za pomysł, trochę poprawiłem twój kod, by poprawić wydajność tutaj \t cArg.setText (String.format ("% 02d:% 02d:% 02d", h, m , s)); –

+1

w jaki sposób można to zrobić, jeśli chronometr jest w widgecie (widget ekranu głównego)? – 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

Dlaczego po prostu nie korzystać Date klasy ??

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

Proste i czyste

+0

Klasa Chronometer oczekuje określonego wzorca w jego metodzie setText (String). Twój kod spowoduje wyjątek. –

+0

@FranziskusKarsunke Czy sprawdziłeś ten wzór? ** Domyślnie wyświetli bieżącą wartość zegara w postaci "MM: SS" lub "H: MM: SS" lub możesz użyć setFormat (String), aby sformatować wartość timera na dowolny ciąg. ** – Marurban

+1

Działa to, ale efektywniej jest pracować z czasem jako długim, zamiast tworzyć nowy obiekt Date i DateFormat co sekundę. – k2col

Powiązane problemy