【问题标题】:how to change format of chronometer?如何更改计时器的格式?
【发布时间】:2010-11-11 08:33:24
【问题描述】:

我的一个问题是在 android 中更改计时器的格式。 我的问题是计时器以 00:00 格式显示时间,我希望它以 00:00:00 格式显示。有人知道答案吗?

【问题讨论】:

    标签: android


    【解决方案1】:

    这是一个简单而智能的时间格式 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();
    

    【讨论】:

    • 老兄,非常好的解决方案。我见过的最简单的方法;)
    • 感谢您的想法,我在这里编辑了您的代码以提高性能 cArg.setText(String.format("%02d:%02d:%02d", h, m, s ));
    • 如果计时器位于小部件(主屏幕小部件)中,有什么方法可以做到这一点?
    【解决方案2】:

    我正在处理同样的问题。实现这个目标的最简单方法是覆盖 Chronometer 的 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】:

      Kotlin中,找到了一个更好的解决方案,每秒不为String分配内存

      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_timerChronometer

      【讨论】:

        【解决方案4】:

        Chronometers setFormat 方法用于添加格式化文本,例如:

        “距离开始的时间 %s”

        结果

        “从开始时间 00:00”

        在 Chronometer 中,您无法在 HH:MM:SS 或 MM:SS 格式之间进行选择。

        【讨论】:

        • 因此,这意味着您无法设置最终结果为“00:00:00”的格式,而无需像其他答案所建议的那样在ChronometerTickListener 中进行一些操作。不是吗?
        【解决方案5】:
        // 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();
        

        【讨论】:

          【解决方案6】:

          我正在开发一个使用这种格式的倒数计时器,但它是用于 HH:MM:SS。那是你要找的还是你要找的 MM:SS:milliseconds。您可以使用此代码并使其从 0 开始计数而不是向下计数。链接在这里 - 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

          【讨论】:

          • 我正在寻找 HH:MM:SS 格式............bt 计时器在以秒或分钟为 00:00:00 格式时不显示它。仅当倒计时以秒为单位时显示 00:00。或分钟。
          【解决方案7】:

          为什么不使用 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);
              }
          });
          

          简单干净

          【讨论】:

          • Chronometer 类在其 setText(String) 方法中需要一个特定的模式。您的代码将引发异常。
          • @FranziskusKarsunke 你检查过这个模式吗? 默认情况下,它会以“MM:SS”或“H:MM:SS”的形式显示当前定时器值,或者您可以使用setFormat(String)将定时器值格式化为任意字符串。
          • 这行得通,但使用 long 时间比每秒实例化一个新的 Date 和 DateFormat 对象更有效。
          猜你喜欢
          • 2016-04-19
          • 2021-11-20
          • 1970-01-01
          • 2020-03-19
          • 1970-01-01
          • 2015-03-24
          • 1970-01-01
          • 2012-01-03
          相关资源
          最近更新 更多