首页 > 代码库 > Android学习笔记_S01_E03_Chronometer(计时器)的使用
Android学习笔记_S01_E03_Chronometer(计时器)的使用
一、基本定义
Chronometer(计时器)组件与DigitalClock都继承自TextView,因此他们都会显示一段文本。但Chrnometer并不显示当前时间,它显示的是从某个起始时间开始,一共过去了多长时间。
二、属性和方法
1、属性:Chronometer(计时器)组件用法比较简单,它只提供了一个android:format属性,用于指定计时器的计时格式。
2、方法:
方法 | 说明 |
setBase(long base) | 设置计时器的时间格式 |
setFormat(String format) | 设置显示时间的格式 |
start() | 开始计时 |
stop() | 停止计时 |
setOnChronemeterTickListener(Chronometer.OnChronometerTickListener listener) | 为计时器绑定事件监听器,当计时器改变时触发该监听器。 |
三、实现效果
在文本框中输入计时秒数,按“开始”计时,计时结束时出现Toast提醒。如果无时间输入,则Toast提醒输入时间。计时途中可停止。
界面:。未输入时间提醒:。时间到的提醒,同时输入框重置:
四、代码编写
1、XML文件中分别放入一个EditText、一个Chronometer和两个Button,并将EditText的输入类型设置为数字(android:inputType="number")。根据自己的喜好将控件摆放。(使用相对布局比较好点)。
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 tools:context=".MainActivity" > 6 7 <EditText 8 android:id="@+id/time" 9 android:layout_width="match_parent"10 android:layout_height="wrap_content"11 android:inputType="number"12 android:hint="请输入计时秒数"/>13 14 <Chronometer 15 android:id="@+id/chronometer"16 android:layout_below="@id/time"17 android:layout_width="wrap_content"18 android:layout_height="wrap_content"19 android:layout_centerHorizontal="true"/>20 21 <Button22 android:id="@+id/start"23 android:layout_width="wrap_content"24 android:layout_height="wrap_content"25 android:layout_below="@+id/chronometer"26 android:text="开始计时" />27 28 <Button 29 android:id="@+id/stop"30 android:layout_width="wrap_content"31 android:layout_height="wrap_content"32 android:layout_below="@id/chronometer"33 android:layout_toRightOf="@id/start"34 android:text="停止"/>35 36 </RelativeLayout>
2、在MainActivity中建立相应控件,并通过findViewById找到。
1 private Button start,stop; 2 private Chronometer ch; 3 private EditText time; 4 5 @Override 6 protected void onCreate(Bundle savedInstanceState) { 7 super.onCreate(savedInstanceState); 8 setContentView(R.layout.activity_main); 9 10 start = (Button) findViewById(R.id.start);11 stop = (Button) findViewById(R.id.stop);12 ch = (Chronometer) findViewById(R.id.chronometer);13 time = (EditText) findViewById(R.id.time);
3、建立两个监听器,ButtonListener实现onClickListener接口,ChListener实现OnChronometerTickListener接口。
ButtonListener监听器用于监听start按钮和stop按钮。通过V.getId()判断按了哪个按钮。如果按了start按钮,通过判断EditText中的内容进行不同的操作:如果EditText为空则Toast提醒输入,如果EditText非空则设置计时器时间为系统时钟,并开始计时,同时start按钮不可用。如果按了stop按钮,则停止计时器并重置为系统时钟,清空EditText内容,设置start按钮可用。
判断EditText内容的为空的语句是editText.getText().toString().trim().equals(""),其中trim()方法是拿到里面的东西后,把前后的空格都过滤掉;清空EditText内容的语句是time.setText("")。完整ButtonListene监听器类的代码如下:
1 class ButtonListener implements OnClickListener{ 2 3 @Override 4 public void onClick(View v) { 5 if (v.getId() == R.id.start ) { 6 if(time.getText().toString().trim().equals("")){ 7 Toast.makeText(MainActivity.this, "请输入时间", Toast.LENGTH_SHORT).show(); 8 }else { 9 ch.setBase(SystemClock.elapsedRealtime());10 ch.start();11 start.setEnabled(false); 12 }13 }else if(v.getId() == R.id.stop){ 14 ch.stop();15 ch.setBase(SystemClock.elapsedRealtime());16 time.setText("");17 start.setEnabled(true);18 } 19 }20 }
ChListener监听器用于监听计时器。通过判断计时器当前时间(SystemClock.elapsedRealtime())与起始时间(通过getBase()方法获得)的差值控制计时器停止。首先新建一个int变量i,然后将EditText中的内容赋值给i。代码如下:
1 int i = Integer.parseInt((EditText.getText().toString()));
代码解析:通过EditText的.getText()方法获得内容,再通过toString()方法将其转成string类型。最后通过整型类里的parseInt(String)方法将string转成int类型。
之后判断计时器的当前时间与起始时间的差值,如果大于i*1000(因为计时器是以毫秒为单位的),则停止计时器并Toast提醒,再重置计时器为系统时钟,清空EditText内容,设置start按钮可用。
完整ChListener监听器类代码如下:
1 class ChListener implements OnChronometerTickListener{ 2 3 @Override 4 public void onChronometerTick(Chronometer chronometer) { 5 System.out.println("sys"+SystemClock.elapsedRealtime()); 6 System.out.println("base"+ch.getBase()); 7 int i = Integer.parseInt((time.getText().toString())); 8 if(SystemClock.elapsedRealtime() - ch.getBase() >i*1000){ 9 ch.stop();10 ch.setBase(SystemClock.elapsedRealtime());11 Toast.makeText(MainActivity.this, "时间到了", Toast.LENGTH_SHORT).show();12 time.setText("");13 start.setEnabled(true);14 } 15 } 16 }
4、新建ButtonListener监听器并分别绑定至start按钮和stop按钮,新建ChListener监听器并绑定至ch计时器。
1 ButtonListener listener = new ButtonListener();2 ChListener chListener = new ChListener();3 start.setOnClickListener(listener); 4 stop.setOnClickListener(listener);5 ch.setOnChronometerTickListener(chListener);
五、源代码
1、XML文件
1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 2 xmlns:tools="http://schemas.android.com/tools" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 tools:context=".MainActivity" > 6 7 <EditText 8 android:id="@+id/time" 9 android:layout_width="match_parent"10 android:layout_height="wrap_content"11 android:inputType="number"12 android:hint="请输入计时秒数"/>13 14 <Chronometer 15 android:id="@+id/chronometer"16 android:layout_below="@id/time"17 android:layout_width="wrap_content"18 android:layout_height="wrap_content"19 android:layout_centerHorizontal="true"/>20 21 <Button22 android:id="@+id/start"23 android:layout_width="wrap_content"24 android:layout_height="wrap_content"25 android:layout_below="@+id/chronometer"26 android:text="开始计时" />27 28 <Button 29 android:id="@+id/stop"30 android:layout_width="wrap_content"31 android:layout_height="wrap_content"32 android:layout_below="@id/chronometer"33 android:layout_toRightOf="@id/start"34 android:text="停止"/>35 36 </RelativeLayout>
2、MainActivity文件
1 package com.example.chonometer; 2 3 import android.R.integer; 4 import android.hardware.input.InputManager; 5 import android.os.Bundle; 6 import android.os.SystemClock; 7 import android.app.Activity; 8 import android.view.Menu; 9 import android.view.View;10 import android.view.View.OnClickListener;11 import android.view.inputmethod.InputMethodManager;12 import android.widget.Button;13 import android.widget.Chronometer;14 import android.widget.EditText;15 import android.widget.TextView;16 import android.widget.Toast;17 import android.widget.Chronometer.OnChronometerTickListener;18 19 public class MainActivity extends Activity {20 21 private Button start,stop;22 private Chronometer ch;23 private EditText time;24 25 @Override26 protected void onCreate(Bundle savedInstanceState) {27 super.onCreate(savedInstanceState);28 setContentView(R.layout.activity_main);29 30 start = (Button) findViewById(R.id.start);31 stop = (Button) findViewById(R.id.stop);32 ch = (Chronometer) findViewById(R.id.chronometer);33 time = (EditText) findViewById(R.id.time);34 35 ButtonListener listener = new ButtonListener();36 ChListener chListener = new ChListener();37 start.setOnClickListener(listener); 38 stop.setOnClickListener(listener);39 ch.setOnChronometerTickListener(chListener); 40 } 41 42 class ButtonListener implements OnClickListener{43 44 @Override45 public void onClick(View v) {46 if (v.getId() == R.id.start ) { 47 if(time.getText().toString().trim().equals("")){48 Toast.makeText(MainActivity.this, "请输入时间", Toast.LENGTH_SHORT).show();49 }else {50 ch.setBase(SystemClock.elapsedRealtime());51 ch.start();52 start.setEnabled(false); 53 }54 }else if(v.getId() == R.id.stop){ 55 ch.stop();56 ch.setBase(SystemClock.elapsedRealtime());57 time.setText("");58 start.setEnabled(true);59 } 60 }61 }62 63 class ChListener implements OnChronometerTickListener{64 65 @Override66 public void onChronometerTick(Chronometer chronometer) {67 System.out.println("sys"+SystemClock.elapsedRealtime());68 System.out.println("base"+ch.getBase()); 69 int i = Integer.parseInt((time.getText().toString())); 70 if(SystemClock.elapsedRealtime() - ch.getBase() >i*1000){71 ch.stop();72 ch.setBase(SystemClock.elapsedRealtime());73 Toast.makeText(MainActivity.this, "时间到了", Toast.LENGTH_SHORT).show();74 time.setText("");75 start.setEnabled(true);76 } 77 } 78 }79 }
Android学习笔记_S01_E03_Chronometer(计时器)的使用