【发布时间】:2010-11-11 08:33:24
【问题描述】:
我的一个问题是在 android 中更改计时器的格式。 我的问题是计时器以 00:00 格式显示时间,我希望它以 00:00:00 格式显示。有人知道答案吗?
【问题讨论】:
标签: android
我的一个问题是在 android 中更改计时器的格式。 我的问题是计时器以 00:00 格式显示时间,我希望它以 00:00:00 格式显示。有人知道答案吗?
【问题讨论】:
标签: android
这是一个简单而智能的时间格式 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();
【讨论】:
我正在处理同样的问题。实现这个目标的最简单方法是覆盖 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 格式化时间。
希望对您有所帮助。
【讨论】:
在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_timer 是Chronometer
【讨论】:
Chronometers setFormat 方法用于添加格式化文本,例如:
“距离开始的时间 %s”
结果
“从开始时间 00:00”
在 Chronometer 中,您无法在 HH:MM:SS 或 MM:SS 格式之间进行选择。
【讨论】:
ChronometerTickListener 中进行一些操作。不是吗?
// 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();
【讨论】:
我正在开发一个使用这种格式的倒数计时器,但它是用于 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
【讨论】:
为什么不使用 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);
}
});
简单干净
【讨论】: