如果是疑惑其显示格式或者是没有work请直接到第三节,看是否是格式设置问题
Android自带的Chronometer可以实现简单的计时功能,它继承自TextView,实现的方式是View.postDelayed+Runnable。
特点是比较简单易用,用法比较单一,但可以通过回调函数做一些自定义操作:
Chronometer.OnChronometerTickListener
1. Layout
布局很简单,就像使用TextView一样,可以设置颜色,字体等。比如:
<Chronometer
android:id="@+id/chronometer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="10dp"
android:layout_marginBottom="10dp"
android:textSize="20sp"
android:textColor="@color/title_bk" />
如果是API level 24及以上,还可以通过设置android:countDown="true"
实现倒计时。
2. 使用
首先获取:
chronometer = findViewById(R.id.chronometer);
chronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer chronometer) {
Log.d(TAG, "Chronometer ticking");
}
});
简单只需要三个接口:
开始计时,以当前时间为base:
Log.d(TAG, "Start chronometer");
chronometer.setBase(SystemClock.elapsedRealtime());
chronometer.start();
结束计时:
Log.d(TAG, "Stop chronometer");
chronometer.stop();
3. 设置格式
Chronometer有setFormat的接口,或者可以设置layout属性android:format="%s"
。
setFormat
函数如果不设置,则显示的格式是”MM:SS”或者”H:MM:SS”,超过一个小时则会显示小时位,否则不显示。
Chronometer会自己得到”MM:SS”或者”H:MM:SS”格式的计时字符串,并填充到setFormat
字符串中的第一个"%s"
,所以这个接口存在一些误导,使得开发者会误认为填入的就是时间显示的格式。
因此,设置的格式字符串一定需要有一个"%s"
(比如"计时:%s"
),不然将不能看到计时。
如果setFormat
不能满足需求,就只能通过回调函数进行定制了。
比如即使时间不足一个小时我们也想要显示小时位:
chronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer c) {
Log.d(TAG, "Chronometer ticking");
long elapsedMillis = SystemClock.elapsedRealtime() - c.getBase();
if(elapsedMillis > 3600000L && elapsedMillis < 36000000L){
c.setFormat("0%s");
}else{
c.setFormat("00:%s");
}
}
});