安卓提供了一个计时器组件:Chronometer,该组件extends TextView,因此都会显示一段文本,但是它显示的时间是从某个起始时间开始过去了多少时间,它只提供了android:format一个属性用于指定计时器的计数格式。
Chronometer的用法很简单,它支持如下用法:
getBase():返回时间。
setBase(long base):设置计时器的起始时间。
start():开始计时。
stop():停止计时。
setFormat(String format):设置显示时间的格式。
setOnChronometerTickListener(Chronometer.OnChronometerTickListener listener):为计时器绑定监听事件。
下面程序设计了一个一分钟的计时器。
首先:在XML文件中定义一个Chronomete和Button组件:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <Chronometer android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/chronometer" android:textColor="#ff0303" android:textSize="12pt" android:layout_gravity="center_horizontal" android:focusable="true" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="启动" android:id="@+id/button" android:layout_gravity="center_horizontal" /> </LinearLayout>
其次:通过setOnChronometerTickListener(Chronometer.OnChronometerTickListener listener)函数为计时器绑定监听事件。程序定义了一个Chronometer组件和Button组件。当用户单击Button时开始计时,计时时间为一分钟。
package happy.chronometer; import android.os.Bundle; import android.os.SystemClock; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.view.View; import android.view.Menu; import android.view.MenuItem; import android.widget.Button; import android.widget.Chronometer; public class MainActivity extends AppCompatActivity { Chronometer ch ; Button start ; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.test); // 获取计时器组件 ch=(Chronometer)findViewById(R.id.chronometer); // 获取开始组件 start = (Button)findViewById(R.id.button); start.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //设置开始计时时间 ch.setBase(SystemClock.elapsedRealtime()); //启动计时器 ch.start(); } }); //为计时器绑定监听事件 ch.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() { @Override public void onChronometerTick(Chronometer ch) { // 如果从开始计时到现在超过了60s if (SystemClock.elapsedRealtime() - ch.getBase() > 60 * 1000) { ch.stop(); start.setEnabled(true); } } }); } }
最后:我们可以看到如上的效果,其中时间为已经流逝的时间。