как изменить формат хронометра? - PullRequest
15 голосов
/ 11 ноября 2010

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

Ответы [ 7 ]

39 голосов
/ 19 июня 2013

Вот простое и умное решение для формата времени 00:00:00 в хронометре в 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();
17 голосов
/ 03 июня 2011

Я имел дело с той же проблемой. Самым простым способом достижения этой цели было бы переопределение метода 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 .

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

3 голосов
/ 02 февраля 2011

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

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

, в результате

Время 00:00 от старта "

В хронометре нельзя выбирать между форматами ЧЧ: ММ: СС или ММ: СС.

2 голосов
/ 07 ноября 2013
// 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();
1 голос
/ 17 мая 2018

В Kotlin , найдено лучшее решение без выделения памяти для строки каждую секунду

cm_timer.format = "00:%s"
cm_timer.setOnChronometerTickListener({ cArg ->
            val elapsedMillis = SystemClock.elapsedRealtime() - cArg.base
            if (elapsedMillis > 3600000L) {
                cArg.format = "0%s"
            }
            else {
                cArg.format = "00:%s"
            }
        })

, где cm_timer - Хронометр

1 голос
/ 19 августа 2014

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

Просто и чисто

1 голос
/ 12 ноября 2010

Я работал над таймером обратного отсчета, который использовал этот формат, но он был для ЧЧ: ММ: СС.Это то, что вы ищете или вы ищете MM: SS: миллисекунды.Вы можете работать с этим кодом и заставить его считать от 0 вместо вниз.Вот ссылка - Форматирование таймера обратного отсчета с 00:00:00 не работает.Отображает 00:00:00 до паузы, затем отображает оставшееся время , и это может помочь - Показать миллисекунды с Android-хронометром

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...