2010-11-11 33 views
14

我的問題之一是在android中更改天文臺的格式。 我有問題,天文鐘顯示00:00格式的時間,我希望它在00:00:00 format.does任何人都知道答案?如何更改天文臺的格式?

回答

1

我正在使用這種格式的倒數計時器,但它是用於HH:MM:SS。那是你在找什麼或者你在尋找MM:SS:毫秒。你可以使用這段代碼,並使其從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

+1

即時尋找HH:MM:SS格式......... BT天文臺表不顯示它時,它是在幾秒鐘或幾分鐘爲00:00: 00 format.it僅在秒倒數時顯示00:00。或分鐘。 – Nikki 2010-11-15 03:55:00

2

精密測setFormat方法是用來添加格式化的文本,如:

「從開始時間%的」

導致

「從時間00:00開始」

在天文臺中,您不能選擇格式HH:MM:SS或MM:SS。

+0

所以這意味着你不能像其他答案所建議的那樣在'ChronometerTickListener'中做某些操作而不設置最終結果爲「00:00:00」的格式。不是嗎? – 2017-12-27 08:25:44

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

我知道這將是更好的自定義的widget寫但對於小型項目來說,它可能是合適的。

在天文臺上設置格式允許格式化文本週圍的實際時間和時間格式化使用DateUtils.formatElapsedTime

希望有所幫助。

30

這裏是天文鐘時間格式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(); 
+2

夥計,真的很好的解決方案。 ) – 2013-10-02 08:46:38

+0

感謝您的想法,我修改了一下代碼以改善性能 \t cArg.setText(String.format(「%02d:%02d:%02d」,h,m ,s)); – 2015-05-03 12:21:01

+1

有沒有辦法做到這一點,如果計時器是在一個小部件(主屏幕小部件)? – ArJ 2016-06-04 13:33:21

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)方法中的特定模式。您的代碼將引發異常。 – 2015-01-29 13:28:45

+0

@FranziskusKarsunke 你檢查過這種模式嗎? **默認情況下,它將以「MM:SS」或「H:MM:SS」的形式顯示當前計時器值,或者您可以使用setFormat(String)將計時器值格式化爲任意字符串** – Marurban 2015-01-29 13:58:18

+1

這是有效的,但將時間作爲一個整體來處理會更有效率,而不是每秒都實例化一個新的Date和DateFormat對象。 – k2col 2015-10-30 18:10:33