2010-11-11 2 views
14

Одна из моих проблем заключается в изменении формата хронометра в android. У меня проблема в том, что хронометр показывает свое время в формате 00:00, и я хочу, чтобы он появился в формате 00:00:00. Кто-нибудь знает ответ?Как изменить формат хронометра?

ответ

1

Я работал над таймером обратного отсчета, который использовал этот формат, но это было для ЧЧ: ММ: СС. Это то, что вы ищете или ищете MM: SS: миллисекунды. Вы можете работать с этим кодом и подсчитывать его с нуля, а не вниз. Вот ссылка - Formatting countdown timer with 00:00:00 not working. Displays 00:00:00 until paused then displays the time remaining , и это может помочь - Show milliseconds with Android Chronometer

+1

им ищет HH: MM: СС ......... Ь хронометр не показывает его, когда он в течение секунд или минут, как 00:00: 00 format.it показывает только 00:00, когда обратный отсчет находится в секундах. или мин. – Nikki

2

Хронометров метода SetFormat используется для добавления отформатированного текста, как:

"Время% s от начала"

в результате

«Время 00:00 с начала»

В хронометре вы не можете выбирать между форматами HH: MM: SS или MM: SS.

+0

Итак, это означает, что вы не можете установить формат, конечный результат которого «00:00:00», без каких-либо манипуляций в «ChronometerTickListener», как предлагают другие ответы. не так ли? –

16

Я имел дело с тем же вопросом. Самый простой способ для достижения этой цели будет переопределение UPDATETEXT метода хронометра, но, к сожалению, это частный метод, так что я сделал это таким образом:

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

Я знаю, что было бы лучше, чтобы написать пользовательский виджет но для небольшого проекта он может быть подходящим.

Формат настройки на хронометре позволяет форматировать текст, окружающий фактическое время и время, отформатирован с использованием DateUtils.formatElapsedTime.

Надеюсь, что это поможет.

30

Вот простое и умное решение для формата время 00:00:00 в хронометре в андроиде

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

Чувак, действительно очень хорошее решение. Самый простой способ, который я когда-либо видел;) –

+0

спасибо за вашу идею, я немного изменил код, чтобы улучшить производительность здесь \t cArg.setText (String.format («% 02d:% 02d:% 02d», h, m , s)); –

+1

есть ли способ сделать это, если хронометр находится в виджетах (виджетов на рабочем столе)? – 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

Почему просто не использовать 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); 
    } 
}); 

Простой и чистый

+0

Класс Chronometer ожидает определенный шаблон в методе setText (String). Ваш код вызовет исключение. –

+0

@FranziskusKarsunke Вы проверили этот шаблон? ** По умолчанию он отображает текущее значение таймера в форме «MM: SS» или «H: MM: SS», или вы можете использовать setFormat (String) для форматирования значения таймера в произвольную строку. ** – Marurban

+1

Это работает, но более эффективно работать со временем как длинным, а не создавать экземпляр нового объекта Date и DateFormat каждую секунду. – k2col

Смежные вопросы