日期和時間選擇對話框

轉自:http://blog.csdn.net/jamesliulyc/article/details/6362621


日期和時間選擇對話框,首先是要獲得當前時間,這裏用 java類中的Calendar來獲得日期和時間(也可以用Date,但是不提倡,Date部分方法已經註釋爲過時), Calendar是一個抽象類,是通過getInstance()來獲得實例

日期和時間選擇對話框無需在像前面一樣借組與AlertDialog.Builder來作爲內容的載體,有直接的Dialog,其實源碼裏面已經包括了Builder。

1、DatePickerDialog 是日期Dialog,如下建立

dialog = new DatePickerDialog(this,
	    				dateListener,
	    				calendar.get(Calendar.YEAR),
	    				calendar.get(Calendar.MONTH),
	    				calendar.get(Calendar.DAY_OF_MONTH));

this 表示當前 Acitivity,表示這是當前Acitivity的對話框

dateListener爲產生日期事件的監聽器,這裏是通過DatePickerDialog.OnDateSetListener來獲得,代碼如下

DatePickerDialog.OnDateSetListener dateListener = 
	new DatePickerDialog.OnDateSetListener() {
		@Override
		public void onDateSet(DatePicker datePicker, 
				int year, int month, int dayOfMonth) {
			EditText editText = 
				(EditText) findViewById(R.id.editText);
			 //Calendar月份是從0開始,所以month要加1
			editText.setText("你選擇了" + year + "年" + 
					(month+1) + "月" + dayOfMonth + "日");
		}
	};

這裏注意的是calendar.getCalendar(Calendar.MONTH), Calendar類中是從0開始取月份的,但是這裏DatePickerDialog已經做了處理。

 2、TimePickerDialog爲時間選擇對話框,實現代碼如下:


dialog = new TimePickerDialog(this, timeListener,
							calendar.get(Calendar.HOUR_OF_DAY),
							calendar.get(Calendar.MINUTE),
							false);   //是否爲二十四制

timeListener 是一個TimePickerDialog.OnTimeSetListener 實例。

 

效果圖如下:

           

                這是日期選擇對話框                                                                        這是時間選擇對話框

 

實現步驟:

第一步:一個用來顯示選擇的內容的輸入框和兩個用來顯示日期和時間的按鈕

res/layout/date_time_dialog_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
    <EditText android:id="@+id/editText"
    	android:layout_width="fill_parent"
    	android:layout_height="wrap_content"
    	android:editable="false"
    	android:cursorVisible="false"/>
    <Button android:id="@+id/btnDate"
    	android:text="顯示日期選擇對話框"
    	android:layout_width="fill_parent"
    	android:layout_height="wrap_content"/>
    <Button android:id="@+id/btnTime"
    	android:text="顯示時間選擇對話框"
    	android:layout_width="fill_parent"
    	android:layout_height="wrap_content" />
</LinearLayout>

第二步:

在DateTimeDialogActivity的OnCreate方法裏面要對兩個button進行單擊事件處理,OnCreateDialog來處理產生對話框

src/com/dialog/activity/DateTimeDialogActivity.java

package com.dialog.activity;

import java.util.Calendar;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TimePicker;

public class DateTimeDialogActivity extends Activity {
	
	private final int DATE_DIALOG = 1;
	
	private final int TIME_DIALOG = 2;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.date_time_dialog_layout);
        
        View.OnClickListener dateBtnListener = 
        	new BtnOnClickListener(DATE_DIALOG);
      
        Button btnDate = (Button) findViewById(R.id.btnDate);
        btnDate.setOnClickListener(dateBtnListener);
        
        View.OnClickListener timeBtnListener = 
        	new BtnOnClickListener(TIME_DIALOG);
        Button btnTime = (Button) findViewById(R.id.btnTime);
        btnTime.setOnClickListener(timeBtnListener);
    }
    
    
    protected Dialog onCreateDialog(int id) {
    	//用來獲取日期和時間的
    	Calendar calendar = Calendar.getInstance();	
    	
    	Dialog dialog = null;
    	switch(id) {
	    	case DATE_DIALOG:
	    		DatePickerDialog.OnDateSetListener dateListener = 
	    			new DatePickerDialog.OnDateSetListener() {
						@Override
						public void onDateSet(DatePicker datePicker, 
								int year, int month, int dayOfMonth) {
							EditText editText = 
								(EditText) findViewById(R.id.editText);
							 //Calendar月份是從0開始,所以month要加1
							editText.setText("你選擇了" + year + "年" + 
									(month+1) + "月" + dayOfMonth + "日");
						}
					};
	    		dialog = new DatePickerDialog(this,
	    				dateListener,
	    				calendar.get(Calendar.YEAR),
	    				calendar.get(Calendar.MONTH),
	    				calendar.get(Calendar.DAY_OF_MONTH));
	    		break;
	    	case TIME_DIALOG:
	    		TimePickerDialog.OnTimeSetListener timeListener = 
	    			new TimePickerDialog.OnTimeSetListener() {
						
						@Override
						public void onTimeSet(TimePicker timerPicker,
								int hourOfDay, int minute) {
							EditText editText = 
								(EditText) findViewById(R.id.editText);
							editText.setText("你選擇了" + hourOfDay + "時" + 
									 minute + "分");
						}
					};
					dialog = new TimePickerDialog(this, timeListener,
							calendar.get(Calendar.HOUR_OF_DAY),
							calendar.get(Calendar.MINUTE),
							false);   //是否爲二十四制
	    		break;
	    	default:
	    		break;
    	}
    	return dialog;
    }
    /*
     * 成員內部類,此處爲提高可重用性,也可以換成匿名內部類
     */
    private class BtnOnClickListener implements View.OnClickListener {
    	
    	private int dialogId = 0;	//默認爲0則不顯示對話框

    	public BtnOnClickListener(int dialogId) {
    		this.dialogId = dialogId;
    	}
		@Override
		public void onClick(View view) {
			showDialog(dialogId);
		}
    	
    }
}

源碼下載地址:http://download.csdn.net/source/3225379

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章