2013/01/05

Android - DatePicker:如何取得"日期"的資料


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

範例:
軟體一開啟時,使用 Calendar 取得當下的年月日,並顯示在textDate1。
之後更改 Datepicker 顯示的年月日,系統會觸發 OnDateChangedListener,
產生出年月日三個數值是,由於這數值屬性為 int,所以我們另用 DateFix 方法將時間更改為 String。
當然若數字小於 10 ,在數字前面我們就多加個 0。
將取得字串在設定到 TextView1。
另外,透過Button取得 DatePicker 送出來的資料,顯示在另一個 另一個 textDate2 上。


圖示:




main_layout.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout2"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".Date" >

    <DatePicker
        android:id="@+id/DatePicker"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textData1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Large Text" />

    <Button
        android:id="@+id/BtnGetDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="63dp"
        android:text="取得日期" />

    <TextView
        android:id="@+id/textData2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Large Text" />

</LinearLayout>

date.java
package com.data;

import java.util.Calendar;

import android.os.Bundle;
import android.app.Activity;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;


import android.widget.TextView;

public class Date extends Activity {

    String Year,Mon,Day;
    private DatePicker DatePicker;
    private TextView textData1;
    private TextView textData2;
    private Button BtnGetDate;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main_layout);
        
        Calendar TodayDate = Calendar.getInstance();    //透過Calendar取的資料
        int sYear = TodayDate.get(Calendar.YEAR);       //一開啟軟體即取得年的數值
        int sMon  = TodayDate.get(Calendar.MONTH) + 1;  //一開啟軟體即取得月的數值
                                                        //月的起始是0,所以+1.
        int sDay = TodayDate.get(Calendar.DAY_OF_MONTH);//一開啟軟體即取得日的數值
        //將取得的數字轉成String.
        Year = DateFix(sYear);    
        Mon  = DateFix(sMon);
        Day  = DateFix(sDay);
        
        textData1     = (TextView)findViewById(R.id.textData1);
        textData2    = (TextView)findViewById(R.id.textData2);
        BtnGetDate    = (Button)findViewById(R.id.BtnGetDate);
        //一開始就將年月日寫入 textDate1
        textData1.setText( Year + "/" + Mon + "/" + Day );
        
        BtnGetDate.setOnClickListener(GDListener);
        
        DatePicker     = (DatePicker)findViewById(R.id.DatePicker);        
        DatePicker.init(TodayDate.get(Calendar.YEAR),TodayDate.get(Calendar.MONTH),
                        TodayDate.get(Calendar.DAY_OF_MONTH),    
        //DatePicker年月日更改後,會觸發作以下的事情。
        new DatePicker.OnDateChangedListener() {
            @Override
            public void onDateChanged(DatePicker view, int year, int monthOfYear, 
                    int dayOfMonth) {
                Year = DateFix(year);
                Mon  = DateFix(monthOfYear + 1); //月的初始是0,所以先加 1。
                Day  = DateFix(dayOfMonth);
                textData1.setText( Year + "/"+Mon+"/"+Day);
            }
        });   
    }  
    
    //按下Button,將年月日的值,設定到 textData2
    private Button.OnClickListener GDListener = new Button.OnClickListener(){

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            textData2.setText(Year+"/"+Mon+"/"+Day);
        }
    };        
    //方法DateFix:將傳送進來的年月日轉成String,在判斷是否前面需要加0。
    private static String DateFix(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