简介
官方提供的简易版时间显示控件Google传送门
计时功能
- 开始计时
chronometer.start()
- 停止计时
chronometer.stop()
- 重置时间
chronometer.setBase(SystemClock.elapsedRealtime());
- 倒计时(暂不建议使用)
chronometer.setBase(SystemClock.elapsedRealtime() + 60 * 1000L);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
chronometer.setCountDown(true);
}
chronometer.start();
倒计时功能这里只是提供了AndroidN以上使用,并且倒计时结束以后,也没有及时停止(可以通过OnChronometerTickListener来监听时间是否是“00:00”,来进行手动停止),可以用Handler代替或者CountDownTimer。
- 格式化时间
Chronometer提供了setFormat来格式化时间,不过只能在原有的时间格式上进行文字的添加
chronometer.setFormat("时间不能倒退:%s");
//如果是小于一小时 MM:SS
时间不能倒退:00:00
//如果是一小时以后 H:MM:SS
时间不能倒退:1:00:00
- 格式化时间 00:00:00
timer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer chronometer) {
setFormat(timer);
}
});
private void setFormat(Chronometer chronometer){
int hour = (int) ((SystemClock.elapsedRealtime() - chronometer.getBase()) / 1000 / 60 / 60);
int minute = (int) ((SystemClock.elapsedRealtime() - chronometer.getBase()) / 1000 / 60) % 60;
int second = (int) ((SystemClock.elapsedRealtime() - chronometer.getBase()) / 1000) % 60;
if (hour < 1) {
if (minute == 59 && second == 59) {
chronometer.setFormat("0" + "%s");
} else {
chronometer.setFormat("0" + String.valueOf(hour) + ":%s");
}
} else if (hour < 10) {
chronometer.setFormat("0" + "%s");
} else {
chronometer.setFormat("%s");
}
}
59:59到1:00:00的时候,需要提前处理。因为这里是监听后格式化的,所以会慢一步。
- 测试建议
设置初始时间为系统时间倒退59分钟50秒,就会从59:50开始计时
chronometer.setBase(SystemClock.elapsedRealtime()-59*60*1000L-50*1000L);