Android Chronometer运用

作者: 胡涂笔记 | 来源:发表于2019-05-09 11:53 被阅读9次

    如果是疑惑其显示格式或者是没有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");
        }
    });
    

    简单只需要三个接口:

    • 开始: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运用

        本文链接:https://www.haomeiwen.com/subject/jnvioqtx.html