2025-05-23

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

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

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

[java]
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來獲得,代碼如下

[java]
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為時間選擇對話框,實現代碼如下:

[java]
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

[xhtml] <?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

[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); 
        } 
         
    } 

 

摘自  心飛揚

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *