1. 程式人生 > >TextView顯示系統時間(秒針變化)

TextView顯示系統時間(秒針變化)

很長時間沒有寫部落格了,發現自己慢慢的便懶了,不想動,一個呢,是天氣比較熱,昨天還是39.5°呢,二來最近比較忙,今天有點閒暇時間,就把以前忘記的知識都整理出來,以便以後查閱,好了,說正題吧,我們知道,用System.currentTimeMillis()可以獲取系統當前的時間,我們可以開啟一個執行緒,然後通過handler發訊息,來實時的更新TextView上顯示的系統時間。

  我們開啟一個執行緒,執行緒每隔一秒傳送一次訊息,我們在訊息中更新TextView上顯示的時間就ok了。

  首先我們在佈局檔案中放一個TextView用來顯示時間,如下所示:

複製程式碼
 1 <?xml version="1.0" encoding="utf-8"
?> 2 <LinearLayout 3 xmlns:android="http://schemas.android.com/apk/res/android" 4 android:layout_width="match_parent" 5 android:layout_height="match_parent" 6 android:background="@android:color/white"> 7 <TextView 8 android:id="@+id/mytime" 9 android:layout_width="match_parent"10 android:layout_height
="match_parent"11 android:gravity="center"12 android:textColor="@android:color/black"13 android:textSize="36sp"/>14 </LinearLayout>
複製程式碼

  之後我們寫一個執行緒,執行緒裡面無限迴圈,每隔一秒傳送一個訊息,其中由Handler來處理顯示的結果:

複製程式碼
 1 publicclass TimeThread extends Thread {
 2         @Override
 3 publicvoid run () {
4 do { 5 try { 6 Thread.sleep(1000); 7 Message msg =new Message(); 8 msg.what = msgKey1; 9 mHandler.sendMessage(msg); 10 } 11 catch (InterruptedException e) { 12 e.printStackTrace(); 13 } 14 } while(true); 15 } 16 }
複製程式碼

  之後會向Handler中發訊息,我們可以通過Handler來更新TextView的顯示內容:

複製程式碼
 1 private Handler mHandler =new Handler() {
 2         @Override
 3 publicvoid handleMessage (Message msg) {
 4 super.handleMessage(msg);
 5 switch (msg.what) {
 6 case msgKey1:
 7 long sysTime = System.currentTimeMillis();
 8                     CharSequence sysTimeStr = DateFormat.format("hh:mm:ss", sysTime);
 9                     mTime.setText(sysTimeStr);
10 break;
11 12 default:
13 break;
14             }
15         }
16     };
複製程式碼

  之後我們可以在Activity的onCreate方法中開啟這個執行緒,這時我們可以看到一個數字時鐘了:

1 publicvoid onCreate(Bundle savedInstanceState) {
2 super.onCreate(savedInstanceState);
3         setContentView(R.layout.time);
4         mTime = (TextView) findViewById(R.id.mytime);
5 new TimeThread().start();
6     }

  整個Activity的程式碼:

複製程式碼
 1 package com.fermax.test;
 2  3 import android.app.Activity;
 4 import android.os.Bundle;
 5 import android.os.Handler;
 6 import android.os.Message;
 7 import android.text.format.DateFormat;
 8 import android.widget.TextView;
 9 10 publicclass TestActivity extends Activity {
11 12 privatestaticfinalint msgKey1 =1;
13 private TextView mTime;
14 15     @Override
16 publicvoid onCreate(Bundle savedInstanceState) {
17 super.onCreate(savedInstanceState);
18         setContentView(R.layout.time);
19         mTime = (TextView) findViewById(R.id.mytime);
20 new TimeThread().start();
21     }
22 23 publicclass TimeThread extends Thread {
24         @Override
25 publicvoid run () {
26 do {
27 try {
28                     Thread.sleep(1000);
29                     Message msg =new Message();
30                     msg.what = msgKey1;
31                     mHandler.sendMessage(msg);
32                 }
33 catch (InterruptedException e) {
34                     e.printStackTrace();
35                 }
36             } while(true);
37         }
38     }
39 40 private Handler mHandler =new Handler() {
41         @Override
42 publicvoid handleMessage (Message msg) {
43 super.handleMessage(msg);
44 switch (msg.what) {
45 case msgKey1:
46 long sysTime = System.currentTimeMillis();
47                     CharSequence sysTimeStr = DateFormat.format("hh:mm:ss", sysTime);
48                     mTime.setText(sysTimeStr);
49 break;
50 51 default:
52 break;
53             }
54         }
55     };
56 }
複製程式碼

執行效果就是當前現實的時間。