用Android中的Chronometer实现HH:MM:SS的显示

  众所周知,Android中的Chronometer控件默认的显示格式为MM:SS,但是我们常常设置的时间要超过一个小时,默认的格式就变得不够用啦。如何动态显示HH呢?其实很简单,只需要一句代码:

//动态改变hh的显示
xiaoshi = (int) ((SystemClock.elapsedRealtime() - chronometer.getBase()) / 1000 / 60);
chronometer.setFormat("0"+String.valueOf(xiaoshi)+":%s");
具体代码如下:

xml布局:




    

        

        
    

    

    

        

Java代码:

package com.example.test;

import android.os.Bundle;
import android.os.SystemClock;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.view.Menu;
import android.view.View;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

	private Chronometer chronometer;
	public static int xiaoshi = 0;
	private int startTime = 0;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		chronometer = (Chronometer) findViewById(R.id.chronometer);
		chronometer.setFormat("00:%s");
		Button btnStart = (Button) findViewById(R.id.btnStart);
		Button btnStop = (Button) findViewById(R.id.btnStop);
		Button btnRest = (Button) findViewById(R.id.btnReset);
		final EditText edtSetTime = (EditText) findViewById(R.id.edt_settime);
		
		btnStart.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				String ss = edtSetTime.getText().toString();
				if (!(ss.equals("") && ss != null)) {
					Toast.makeText(MainActivity.this, "开始计时",
							Toast.LENGTH_SHORT).show();
					startTime = Integer.parseInt(edtSetTime.getText()
							.toString());
					// 设置开始时间
					chronometer.setBase(SystemClock.elapsedRealtime());
					// 开始计时
					chronometer.start();
				} else
					Toast.makeText(MainActivity.this, "没有设置计时时间",
							Toast.LENGTH_SHORT).show();
			}
		});
		btnStop.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				// 停止计时
				chronometer.stop();
			}
		});
		// 重置
		btnRest.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub
				chronometer.setBase(SystemClock.elapsedRealtime());
			}
		});
		chronometer
				.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {

					@Override
					public void onChronometerTick(Chronometer chronometer) {
						// TODO Auto-generated method stub
						xiaoshi = (int) ((SystemClock.elapsedRealtime() - chronometer.getBase()) / 1000 / 60);//
						chronometer.setFormat("0"+String.valueOf(xiaoshi)+":%s");
						// 如果从开始计时到现在超过了starttime分钟(SystemClock.elapsedRealtime()获得从开机到现在的毫秒数,包括睡眠时间)
						if (SystemClock.elapsedRealtime()
								- chronometer.getBase() > startTime * 1000 * 60) {
							chronometer.stop();
							// 给用户提示
							showDialog();
						}
					}
				});
	}

	protected void showDialog() {
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setIcon(R.drawable.ic_launcher);
		builder.setTitle("警告").setMessage("时间到")
				.setPositiveButton("确定", new DialogInterface.OnClickListener() {
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
					}
				});
		AlertDialog dialog = builder.create();
		dialog.show();
	}

	@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;
	}

}



你可能感兴趣的:(Android,学习笔记)