Android(安卓)Chronometer运用
16lz
2021-01-26
如果是疑惑其显示格式或者是没有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(安卓)BLE蓝牙开发中读取数据时设置Notify的方法
- android5.1-在系统设置里添加设置选项 以及 USB-OTG 模式切换
- 使用 Android(安卓)Studio 搭建安卓开发环境
- Android中控制屏幕旋转的相关设置
- android 自定义照相机Camera黑屏
- 针对android游戏截图分享
- Android开发:ImageView 设置圆角边框
- activity 设置Theme.Dialog View高度
- Android(安卓)通用Dialog的写法