我的一个问题是在android中更改计时器的格式。 我有问题,天文台显示其00:00格式的时间,我希望它以00:00:00格式出现。有人知道答案吗?
答案 0 :(得分:38)
这是一个简单而智能的解决方案,适用于时间格式00:00:00 in 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();
答案 1 :(得分:17)
我正在处理同样的问题。实现这一目标的最简单方法是覆盖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 格式化围绕实际时间和时间的格式文本。
希望有所帮助。
答案 2 :(得分:2)
计时器setFormat方法用于添加格式化文本,如:
“从开始时间%s”
结果
“从开始时间00:00”
在天文台中,您无法选择格式HH:MM:SS或MM:SS。
答案 3 :(得分:2)
// 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();
答案 4 :(得分: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
答案 5 :(得分:1)
为什么不使用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);
}
});
简单干净
答案 6 :(得分:1)
在 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
为Chronometer