🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
Chronometer直接继承了TextView组件,它会显示一段文本,显示从某个其实时间开始,一共过了多长时间。我们看Chronometer的源码: ![](https://box.kancloud.cn/2016-03-10_56e0d9a9dae9d.jpg) 可以看出计时器是直接继承了TextView,当然可以用TextView的所有属性和方法。同时及时其还**有自己的内部接口OnChronometerTickListener** 计时器的新增属性和方法: ![](https://box.kancloud.cn/2016-03-10_56e0d9a9ef4f6.jpg) 计时器的常用方法如下: setBase(long base):设置计时器的起始时间 setFormat(String format) :设置显示时间的格式 start() :开始计时 stop():停止计时 setOnChronometerTickListener(OnChronometerTickListener listener);为计时器绑定时间监听器,**当计时器改变时触发该监听器** 下面演示,点击按钮时开始计时,再次点击是停止计时,显示这段时间。注释的部分是当用户点击Button时系统开始计时,当计时超过20秒停止计时。 ~~~ <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/root" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center_horizontal" android:orientation="vertical" > <Chronometer android:id="@+id/chronometer1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Chronometer" /> <Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button" /> </LinearLayout> ~~~ ~~~ package com.example.chronometertest; import android.app.Activity; import android.os.Bundle; import android.os.SystemClock; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.Chronometer; import android.widget.Chronometer.OnChronometerTickListener; public class MainActivity extends Activity { Chronometer ch; Button btn; int flag=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //获取计时组件 ch=(Chronometer) findViewById(R.id.chronometer1); btn=(Button) findViewById(R.id.button1); btn.setOnClickListener(new OnClickListener(){ @Override public void onClick(View v) { // TODO Auto-generated method stub if(flag==0){ //设置开始计时的时间,点一下按钮开始,在点一下停止 ch.setBase(SystemClock.elapsedRealtime()); ch.start();//开始 flag=1; }else{ ch.stop();//停止 flag=0; } /* //设置开始计时的时间 ch.setBase(SystemClock.elapsedRealtime()); ch.start(); btn.setEnabled(false);//按钮设置不可用 */ } }); //为chronometer设置事件监听器、当计时器改变是触发该监听器 /* ch.setOnChronometerTickListener(new OnChronometerTickListener(){ @Override public void onChronometerTick(Chronometer chronometer) { // TODO Auto-generated method stub //如果从现在开始计时到现在超过了20秒 if(SystemClock.elapsedRealtime()-chronometer.getBase()>20*1000){ ch.stop(); btn.setEnabled(true); } } });*/ } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle action bar item clicks here. The action bar will // automatically handle clicks on the Home/Up button, so long // as you specify a parent activity in AndroidManifest.xml. int id = item.getItemId(); if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } } ~~~ ![](https://box.kancloud.cn/2016-03-10_56e0d9aa0c092.jpg) ![](https://box.kancloud.cn/2016-03-10_56e0d9aa24285.jpg)