Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 跟我學Android之九 日期時間組件

跟我學Android之九 日期時間組件

編輯:關於Android編程

本章內容

第1節 AnalogClock和DigitalClock
第2節 CalendarView
第3節 DatePicker和TimerPicker
第4節 Chronometer
第5節 Timer類

本章目標

掌握圖形時鐘和數字時鐘的用法。
掌握日歷視圖的用法。
熟練掌握日期和時間選擇器的用法。
熟練掌握Chronometer的用法。
熟練掌握Timer類的用法。

AnalogClock是一個模擬時鐘視圖,使用AnalogClock標簽進行布局,除了長寬外基本需要其他屬性,對應的Java類是android.widget.AnalogClock,布局示例如下:
<AnalogClock
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

\

DigitalClock是一個數字時鐘視圖,使用DigitalClock標簽進行布局,除了長寬外基本需要其他屬性,對應的Java類是android.widget.DigitalClock,布局示例如下:

<DigitalClock
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
\

日歷視圖CalendarView,可用於顯示和選擇日期


事件,選項改變事件
public void onSelectedDayChange(CalendarView view, int year,
					int month, int dayOfMonth)
	 {
// 使用Toast顯示用戶選擇的日期
	Toast.makeText(CalendarViewTest.this,
"你生日是" + year + "年" + month + "月" + dayOfMonth + "日" ,
	Toast.LENGTH_SHORT).show();
	}
});

 

\

 

DatePicker是一個用於日期選擇的控件,使用DatePicker進行布局,常用屬性如下:
android:calendarViewShown 表示是否顯示完整日歷
android:endYear 表示可以選擇的最大年份
android:maxDate 表示日歷顯示的最大日期
android:spinnerShown 表示是否顯示調節箭頭按鈕

\ \

 

DatePicker是一個用於日期選擇的控件,對應的類是android.widget.DatePicker,常用方法如下:

init() 用於初始化顯示日期和注冊日期選擇變化的監聽器

getYear() 用於提取選中的年份

getMonth() 用於提取選中的月份

getDayOfMonth() 用於提取選中的日

布局示例如下:

 



TimePicker是一個用於時間選擇的控件,使用TimePicker進行布局,除了長寬外基本不用設置其他屬性

 

對應的類是android.widget.TimePicker,常用方法如下:

getCurrentHour() 獲取當前小時

getCurrentMinute() 獲取當前分鐘

android.widget.TimePicker.OnTimeChangedListener為事件監聽接口

\

 

計時器Chronometer,該組件與DigitalClock都繼承自TextView,因此它們都會顯示一段文本。但Chronometer並不顯示當前時間,它顯示的是從某個起始時間開始,一共過去了多長時間。
Chronometer支持如下常用方法。
setBase(long base):設置計時器的起始時間。
setFormat(String format):設置顯示時間的格式。
start():開始計時。
stop():停止計時。
setOnChronometerTickListener(Chronometer.OnChronometerTickListener listener):為計時器綁定事件監聽器,當計時器改變時觸發該監聽器。

 

使用Chronometer控件實現計器的操作,開始

// 設置開始計時時間
chronometer.setBase(SystemClock.elapsedRealtime());
// 開始記時
chronometer.start();

chronometer.stop(); //停止

 

計時器定時觸發的事件

 

 

 chronometer.setOnChronometerTickListener(new Chronometer.OnChronometerTickListener() {   
public void onChronometerTick(Chronometer chronometer) {   
                        // 如果開始計時到現在超過了startime秒   
                        if (SystemClock.elapsedRealtime()   
                                - chronometer.getBase() > startTime * 1000) {   
                            chronometer.stop();   
                            // 給用戶提示   
                            showDialog();   
                        }
                    }   
                }); 


 

基於Chronometer制作幻燈片

 

\

 

Timer類
Timer類的功能與Chronometer組件類似,可以每隔特定時間執行程序代碼,且功能比Chronometer組件強大
語法

 

 

Timer對象是以schedule方法執行

Timer對象名稱.schedule(TimerTask對象,延遲時間,間隔時間);

 

TimerTask對象:是Timer對象定時執行的程序代碼所在,開發者必須自己編寫要執行的程序代碼。延遲時間:設置多長時間後才開始執行Timer對象,單位是毫秒。間隔時間:設置間隔多長時間執行TimerTask對象一次,單位是毫秒。

 

TimerTask類
TimerTask對象是Timer對象的主體,也就是用來定義Timer對象定時要執行的工作內容。在TimerTask對象中run方法裡的程序代碼就是重復執行的代碼塊,語法為

 

 

private TimerTask變量名稱=new  TimerTask() {
    public void run()
    {
    	執行程序代碼…
    }
);

Handler對象是應用程序中不同線程之間的消息中介,在TimerTask對象中使用Message對象送出消息。

 

 

public void run ()
 {
          Message message=new Message () ; 
          message.what=送出消息;
          handler.sendMessage (message) ;
 }

Handler對象接收消息的語法為:

 

 

 

private Handler變量名稱=new  Handler(){
    public void handleMessage(Message msg
    {    super.handleMessage (msg);
    	switch (msg.what){
    	case接收消息: 	程序代碼
    	break;
   )   }};
計時秒表初始化計時器

 

 

 

Timer timer=new Timer();//創建Timer對象
timer.schedule(new TimerTask() {//創建TimerTask對象
public void run() {
	if(flag){
	tSec++;
	Message msg=new Message();//創建消息對象
	msg.what=1;//設定類型
	handler.sendMessage(msg);//傳送消息給Handler
	}
}
}, 0,1000);//立刻開始執行,時間間隔為1000毫秒

計時秒表,接受消息

 

 

public void handleMessage(Message msg){//接受消息
super.handleMessage(msg);
switch(msg.what){//判斷消息類型
	case 1:
		cSec=tSec%60;//獲取秒數
		cMin=tSec/60;//獲取分鐘數
	String str=String.format("%02d:%02d", cMin,cSec);//以00:00的格式顯示數據
	txtClock.setText(str);
	break;
}
}


 

\

 

 

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved