Android Chronometer运用

如果是疑惑其显示格式或者是没有work请直接到第三节,看是否是格式设置问题

Android自带的Chronometer可以实现简单的计时功能,它继承自TextView,实现的方式是View.postDelayed+Runnable。
特点是比较简单易用,用法比较单一,但可以通过回调函数做一些自定义操作:
Chronometer.OnChronometerTickListener

1. Layout

布局很简单,就像使用TextView一样,可以设置颜色,字体等。比如:


如果是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");
    }
});

简单只需要三个接口:

  • 开始:start
  • 结束:stop
  • 设置计时起点:setBase,使用的时间是SystemClock.elapsedRealtime()

开始计时,以当前时间为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");
        }
    }
});

你可能感兴趣的:(Android Chronometer运用)