2010-11-11 24 views
14

Một trong những vấn đề của tôi là thay đổi định dạng của chronometer trong android. tôi có vấn đề mà chronometer cho thấy thời gian của nó trong định dạng 00:00 và tôi muốn nó đến trong định dạng 00:00:00.does ai biết câu trả lời?cách thay đổi định dạng của công tơ mét?

Trả lời

1

Tôi đang làm việc trên đồng hồ đếm ngược đã sử dụng định dạng này nhưng nó dành cho HH: MM: SS. Đó là những gì bạn đang tìm kiếm hoặc bạn đang tìm kiếm MM: SS: mili giây. Bạn có thể làm việc với mã này và làm cho nó đếm từ 0 thay vì xuống. Dưới đây là liên kết - Formatting countdown timer with 00:00:00 not working. Displays 00:00:00 until paused then displays the time remaining và điều này có thể giúp đỡ - Show milliseconds with Android Chronometer

+1

im looking for HH: MM: SS ......... BT chronometer không hiển thị nó khi nó là chỉ trong vài giây hoặc vài phút là 00:00: 00 định dạng.nó chỉ hiển thị 00:00 khi đếm ngược diễn ra trong giây lát. hoặc phút – Nikki

2

hồ thời gian chính thức setFormat được sử dụng để thêm văn bản formated như:

"Thời gian% s từ đầu"

kết quả

"Thời gian 00:00 từ đầu"

Trong Chronometer bạn không thể chọn giữa các định dạng HH: MM: SS hoặc MM: SS.

+0

Vì vậy, điều này có nghĩa là không có cách nào bạn có thể đặt định dạng kết quả cuối cùng là "00:00:00" mà không thực hiện một số thao tác trong 'ChronometerTickListener' như các câu trả lời khác được đề xuất. phải không? –

16

Tôi đã xử lý cùng một vấn đề. Cách đơn giản nhất để đạt được mục tiêu này sẽ được trọng UPDATETEXT phương pháp của Chronometer, nhưng tiếc là nó là một phương pháp riêng vì vậy tôi đã làm điều này theo cách này:

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

Tôi biết rằng nó sẽ là tốt hơn để viết tùy tùng nhưng đối với dự án nhỏ, nó có thể phù hợp.

Định dạng cài đặt trên công tơ mét cho phép định dạng văn bản xung quanh thời gian thực tế và thời gian được định dạng bằng cách sử dụng DateUtils.formatElapsedTime.

Hy vọng điều đó sẽ hữu ích.

30

Dưới đây là một giải pháp dễ dàng và thông minh cho định dạng thời gian 0:00:00 trong chronometer trong 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

Dude, giải pháp thực sự tốt đẹp. Cách dễ nhất mà tôi từng thấy;) –

+0

cảm ơn ý tưởng của bạn, tôi đã chỉnh sửa mã của bạn một chút để cải thiện hiệu suất tại đây \t cArg.setText (String.format ("% 02d:% 02d:% 02d", h, m , s)); –

+1

trong đó có cách nào để làm điều này nếu chronometer là trong một widget (widget màn hình)? – 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

Tại sao chỉ không sử dụng ngày lớp ??

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

đơn giản và sạch sẽ

+0

Lớp Chronometer kỳ vọng một mẫu cụ thể trong phương thức setText (String) của nó. Mã của bạn sẽ làm tăng Ngoại lệ. –

+0

@FranziskusKarsunke Bạn đã kiểm tra mẫu này chưa? ** Theo mặc định, nó sẽ hiển thị giá trị bộ đếm thời gian hiện tại dưới dạng "MM: SS" hoặc "H: MM: SS" hoặc bạn có thể sử dụng setFormat (String) để định dạng giá trị bộ hẹn giờ thành chuỗi tùy ý. ** – Marurban

+1

Điều này làm việc, nhưng nó là hiệu quả hơn để làm việc với thời gian như là một thời gian dài hơn là instantiating một đối tượng Date và DateFormat mới mỗi giây. – k2col

Các vấn đề liên quan