[Android 開發] DatePickerDialog 日期選擇對話框的使用

在 Android 的開發上,讓使用者選擇日期是一件很常做的事期, Android 內其實內建日期選擇工具 DatePickerDialog ,只要透過這個對話框,就可以讓使用者快速設定日期,如果你是 Android 的開發者,那麼這個工具一定不可以錯過。

 

假設,我們有一個 Android 的 EditText ,當我們按下這個 EditText 時,就希望跳出日期選擇工具,讓使用者設定日期,該怎麼做呢?首先,我們當然要刻 EditText 啦,如下的範例。

<EditText
android:id="@+id/edit_birthday"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:inputType="date"
android:singleLine="true" />

 

接下來,就得在程式碼中加入 EditText 的監聽事件,範例如下:

private EditText etBirthday = null;
etBirthday = (EditText) findViewById(R.id.edit_birthday);
etBirthday.setOnClickListener(this);

 

在 EditText 點下去之後,要出現 DatePickerDialog 讓使用者選擇日期,所以我們先調用 DatePickerDialog 的對話框

DatePickerDialog dialog = new DatePickerDialog(SubmitBirthdayActivity.this, 
                                 datepicker, 
                                 m_Calendar.get(Calendar.YEAR), 
                                 m_Calendar.get(Calendar.MONTH),
                                 m_Calendar.get(Calendar.DAY_OF_MONTH));
dialog.show();

 

 

其中, datepicker 為 DatePickerDialog 的 Callback,因為我們是要讓使用者設定日期時,再於 EditText 來顯示日期,所以只要實做 OnDateSetListener 這個 Listener 就可以了。

DatePickerDialog.OnDateSetListener datepicker = new DatePickerDialog.OnDateSetListener() 
{
    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) 
    {
        m_Calendar.set(Calendar.YEAR, year);
        m_Calendar.set(Calendar.MONTH, monthOfYear);
        m_Calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
        String myFormat = "yyyy/MM/dd";
        SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.TAIWAN);
        etBirthday.setText(sdf.format(m_Calendar.getTime()));
    }
};

 

整體 JAVA 程式碼如可以拚湊如下,至於內容依個人實做需求和 XML 檔設計來做調整。

public class SubmitBirthdayActivity extends Activity implements OnClickListener
{
        
    private Calendar m_Calendar = Calendar.getInstance();
    private EditText etBirthday = null;

    protected void onResume()
    {
        etBirthday = (EditText) findViewById(R.id.edit_birthday);
        etBirthday.setOnClickListener(this);    
    }

    DatePickerDialog.OnDateSetListener datepicker = new DatePickerDialog.OnDateSetListener() 
    {

        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) 
        {
            m_Calendar.set(Calendar.YEAR, year);
            m_Calendar.set(Calendar.MONTH, monthOfYear);
            m_Calendar.set(Calendar.DAY_OF_MONTH, dayOfMonth);
            String myFormat = "yyyy/MM/dd"; //In which you need put here
            SimpleDateFormat sdf = new SimpleDateFormat(myFormat, Locale.TAIWAN);
            etBirthday.setText(sdf.format(m_Calendar.getTime()));
        }
    };

    @Override
    public void onClick(View v)
    {
        if (v.getId() == etBirthday.getId())
        {
            DatePickerDialog dialog = 
                        new DatePickerDialog(SubmitBirthdayActivity.this, 
                                 datepicker, 
                                 m_Calendar.get(Calendar.YEAR), 
                                 m_Calendar.get(Calendar.MONTH),
                                 m_Calendar.get(Calendar.DAY_OF_MONTH));
            dialog.show();          
        }   
    }   
}
1 Comment
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
gamester.wang
gamester.wang
9 years ago

code is : DatePickerDialog dialog = new DatePickerDialog(this, datepicker,year,month,day);
But I got error : The constructor DatePickerDialog(ReportFragment, DatePickerDialog.OnDateSetListener, int, int, int) is undefined
How to correct it ?