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 <Button 22 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 <Button 22 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 @Override 26 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 @Override 45 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 @Override 66 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 }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。