众里寻她千百度,蓦然回首,那人却在灯火阑珊处。——宋辛弃疾青玉案
本讲内容:Chronometer 定时器
Chronometer是一个简单的定时器,你可以给它一个开始时间,并以此定时,或者如果你不给它一个开始时间,它将会使用你的时间通话开始。默认情况下它会显示在当前定时器的值的形式“分:秒”或“H:MM:SS的”,或者可以使用的Set(字符串)格式的定时器值到一个任意字符串
一、常用属性
android:format:定义时间的格式如:hh:mm:ss
二、常用方法
1、setBase(long base):设置倒计时定时器
2、setFormat(String format):设置显示时间的格式。
3、start():开始计时
4、stop():停止计时
5、setOnChronometerTickListener(Chronometer.OnChronometerTickListener listener):当计时器改变时调用。
示例一:
下面是res/layout/activity_main.xml 布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.text1.MainActivity$PlaceholderFragment" >
<Chronometer
android:id="@+id/chronometer"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:format="計時:%s"/>
<Button
android:id="@+id/start"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="開始"/>
<Button
android:id="@+id/stop"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="停止"/>
<Button
android:id="@+id/reset"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="重置"/>
<Button
android:id="@+id/set_format"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="設置格式"/>
<Button
android:id="@+id/clear_format"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="清除格式"/>
</LinearLayout>
下面是MainActivity.java主界面文件:
public class MainActivity extends Activity implements OnClickListener{
private Button star;
private Button stop;
private Button reset;
private Button set_format;
private Button clear_format;
private Chronometer chronometer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViews();
}
public void findViews() {
star=(Button) findViewById(R.id.start);
stop=(Button) findViewById(R.id.stop);
reset=(Button) findViewById(R.id.reset);
set_format=(Button) findViewById(R.id.set_format);
clear_format=(Button) findViewById(R.id.clear_format);
chronometer=(Chronometer) findViewById(R.id.chronometer);
//chronometer.setFormat("計時:%s");
star.setOnClickListener(this);
stop.setOnClickListener(this);
reset.setOnClickListener(this);
set_format.setOnClickListener(this);
clear_format.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.start:
chronometer.start();
break;
case R.id.stop:
chronometer.stop();
break;
case R.id.reset:
chronometer.setBase(SystemClock.elapsedRealtime());//<span style="color: rgb(51, 51, 51); font-family: 'Microsoft Yahei'; font-size: 14px; line-height: 28px; white-space: pre-wrap;">设定系统时钟.</span>
break;
case R.id.set_format:
chronometer.setFormat("定時計時器 (%s)");
break;
case R.id.clear_format:
chronometer.setFormat(null);
break;
default:
break;
}
}
}
示例二:
下面是res/layout/activity_main.xml 布局文件:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.example.text1.MainActivity$PlaceholderFragment" >
<Chronometer
android:id="@+id/chronometer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:format="%s"
android:gravity="center"
android:textColor="#542039"
android:textSize="25sp"/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="10dp">
<TextView
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="2"
android:gravity="center"
android:text="设置时间:"
android:textSize="25sp"/>
<EditText
android:id="@+id/settime"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:inputType="number"/>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp">
<Button
android:id="@+id/start"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="开始记时"/>
<Button
android:id="@+id/stop"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="停止记时" />
<Button
android:id="@+id/reset"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="重置"/>
</LinearLayout>
</LinearLayout>
下面是MainActivity.java主界面文件:
public class MainActivity extends Activity implements OnClickListener{
private Button star;
private Button stop;
private Button reset;
private EditText settime;
private Chronometer chronometer;
private int startTime=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViews();
// 设置开始讲时时间
chronometer.setBase(SystemClock.elapsedRealtime());
// 开始记时
chronometer.start();
chronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {
@Override
public void onChronometerTick(Chronometer chronometer) {
// 如果开始计时到现在超过了startime秒
if(SystemClock.elapsedRealtime()-chronometer.getBase()>10*1000){
chronometer.stop();
//给用户提示
showDialog();
}
}
});
}
private void findViews() {
star=(Button) findViewById(R.id.start);
stop=(Button) findViewById(R.id.stop);
reset=(Button) findViewById(R.id.reset);
settime=(EditText) findViewById(R.id.settime);
chronometer=(Chronometer) findViewById(R.id.chronometer);
star.setOnClickListener(this);
stop.setOnClickListener(this);
reset.setOnClickListener(this);
}
private void showDialog() {
AlertDialog.Builder builder=new Builder(this);
builder.setIcon(R.drawable.ic_launcher).setTitle("警告").setMessage("时间到");
builder.setPositiveButton("确定", null).setNegativeButton("取消", null).show();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.start:
String ss=settime.getText().toString();
if(!(ss.equals("")&&ss!=null)){
startTime=Integer.parseInt(ss);
}
// 设置开始讲时时间
chronometer.setBase(SystemClock.elapsedRealtime());
// 开始记时
chronometer.start();
break;
case R.id.stop:
chronometer.stop();
break;
case R.id.reset:
chronometer.setBase(SystemClock.elapsedRealtime());
break;
}
}
}
Take your time and enjoy it