2013/01/04

Android - TimePicker:如何取得時間的資料

資料取得上,除一般透過輸入的資料外,也常會使用到時間的紀錄。
而時間的取得就可以透過TimePicker來即時取的當下的時間。
當然這時間可以再另做設定,只是透過這樣的方法,使用者在輸入資料的時候。
可以避免資料的輸入手誤或錯誤等等。

範例:
使用 Timepicker 顯示的時間,當我們更改時間即會觸發 setOnTimeChangedListener。
產生出來的數值是 int,所以我們另用 TimeFix 將時間更改為 String。
當然若數字小於 10 ,在數字前面我們就多加個 0。
將取得字串在設定到 TextView1。
另外,透過Button取得 TimePicker 送出來的資料,顯示在另一個 TextView 上。

圖示:一個是在 Android 2.3的樣式,一個是 4.1 的樣式。

main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".Time" >

    <TimePicker
        android:id="@+id/timePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true" />

    <Button
        android:id="@+id/BtnGetTime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/textTime1"
        android:layout_marginTop="31dp"
        android:text="Button" />

    <TextView
        android:id="@+id/textTime1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_below="@+id/timePicker"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

    <TextView
        android:id="@+id/textTime2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBottom="@+id/BtnGetTime"
        android:layout_toRightOf="@+id/BtnGetTime"
        android:text="Large Text"
        android:textAppearance="?android:attr/textAppearanceLarge" />

</RelativeLayout>

time.java
package com.example.time;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;

public class Time extends Activity {
    private TimePicker timePicker;
    private TextView textTime1,textTime2;
    private Button     BtnGetTime;
    String H;
    String M;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);
        
        textTime1    =    (TextView)findViewById(R.id.textTime1);        //自動取得時間
        textTime2    =    (TextView)findViewById(R.id.textTime2);        //透過按鈕取得時間
        BtnGetTime   =    (Button)findViewById(R.id.BtnGetTime);
        BtnGetTime.setOnClickListener(GTimeListener);
        
        timePicker    =    (TimePicker)findViewById(R.id.timePicker);
        //timepicker時間更改時,執行下面的動作。
        timePicker.setOnTimeChangedListener(new OnTimeChangedListener(){
            @Override
            public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
                // TODO Auto-generated method stub
                //取得 hour的值,透過TimeFix方法。轉換成String.並初始H。
                H = TimeFix(hourOfDay);
                //取得 minute的值,透過TimeFix方法。轉換成String.並初始M。
                M = TimeFix(minute);
                //將取得的資料設定到 textTime1
                textTime1.setText(H + ":" +M);
            }
        });
    }
    
    private Button.OnClickListener GTimeListener = 
            new Button.OnClickListener(){
        //按下按鈕後將先前Timepicker取得的值 H和M,
        //設定到 textTime2
        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            switch (v.getId())
            {
                case R.id.BtnGetTime:
                {
                    textTime2.setText(H + ":" +M);
                    break;
                }
            }
        }
    };
        
    //Timepicker取得的資料為int,但時間數字小於10,是不會有像06這樣的情況。
    //所以透過TimeFix這個方法將送過來的數字轉換成String,在判斷是否需要加0。
    private static String TimeFix(int c){
        if (c >= 10)
            return String.valueOf(c);
        else
            return "0" + String.valueOf(c);
    }    
}

VoiceHero 九折優惠碼

  用我的優惠碼 v_t9msjy 購買 Hero 或 Vclass 課程,都能享有 9 折優惠 ! 馬上報名:https://bit.ly/34w3dif