用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; } }
相关文章推荐
- 使用RecyclerView替代ListView
- .Net程序猿玩转Android开发---(8)表格布局TableLayout
- Android中管理多个Fragment的最佳实践,完美解决保存状态与重影问题(转)
- Android系统手机为什么卡?
- Android RecyclerView item没有match parent问题
- Android 把XML定义的控件动态实例化
- Android性能优化之渲染优化的8个点
- 【Android Framework】 Android Binder 机制解析
- android 动态加载sd卡的jar文件
- Qt配置Android环境
- ListView嵌套ListView
- Android ImageView深入理解
- Android-动画简介
- AS开发错误整理
- Gradle
- Android从入门到精通pdf+书源代码
- Android布局发现的小问题
- Crosswalk web引擎Android中的使用
- Android Intent的作用,哪些类型的数据可以被传递
- android studio 使用checkstyle全攻略