您的位置:首页 > 移动开发 > Android开发

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

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

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

xml布局:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/bg"
android:orientation="vertical" >

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="10dip"
android:orientation="horizontal" >

<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="3"
android:layout_gravity="center"
android:textColor="#fff000"
android:text="@string/start_time" />

<EditText
android:id="@+id/edt_settime"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:textColor="#fff000"
android:inputType="number" />
</LinearLayout>

<Chronometer
android:id="@+id/chronometer"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:format="00:00:00"
android:gravity="center"
android:textColor="#ff0000"
android:textSize="60sp" />

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="10dip"
android:orientation="horizontal" >

<Button
android:id="@+id/btnStart"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/start_button" />

<Button
android:id="@+id/btnStop"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/stop_time" />

<Button
android:id="@+id/btnReset"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="@string/reset_button" />
</LinearLayout>

</LinearLayout>


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

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: