日期、時間選擇器(DatePicker和TimePicker)的功能和用法
DatePicker和TimePicker是兩個比較常用的控件,它們都從FrameLayout派生而來,其中DatePicker用于選擇日期、TimePicker用于選擇時間。
DatePicker和TimePicker在FrameLayout的基礎上提供了一些方法來擷取目前使用者所選擇的日期、時間;開發者可以通過為DatePicker添加OnDateChangedListener、為TimePicker添加OnTimeChangedListener監聽器進行監聽來擷取使用者選擇的日期和時間。
DatePicker(日期選擇器)
結構:
<pre name="code" class="html">java.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
↳ android.widget.FrameLayout
↳ android.widget.DatePicker
概述:
一個選擇年月日的月曆布局視圖,對于對話框視圖,參見 DatePickerDialog.
公共方法:
Public Methods | |
int | getDayOfMonth() 擷取選擇的天數 |
int | getMonth() 擷取選擇的月份 |
int | getYear() 擷取選擇的年份 |
void | init(int year, int monthOfYear, int dayOfMonth, DatePicker.OnDateChangedListener onDateChangedListener) 初始化年月日 |
void | setEnabled(boolean enabled) 設定視圖的啟用狀态 |
void | updateDate(int year, int monthOfYear, int dayOfMonth) 更新日期 |
DatePicker支援的XML屬性:
XML屬性 | 說明 |
android:calendarViewShown | 設定該日期選擇器是否顯示ClendarView元件 |
android:endYear | 設定該日期選擇器允許選擇的最後一年 |
android:startYear | 設定該日期選擇器允許選擇的第一一年 |
android:maxDate | 設定該日期選擇器允許選擇的最大日期。以mm/dd/yyyy格式指定最大日期 |
android:minDate | 設定該日期選擇器允許選擇的最小日期。以mm/dd/yyyy格式指定最小日期 |
android:spinnersShown | 設定該日期選擇器是否顯示Spinner日期選擇元件 |
TimePicker(時間選擇器)
結構:
<pre name="code" class="html">ava.lang.Object
↳ android.view.View
↳ android.view.ViewGroup
↳ android.widget.FrameLayout
↳ android.widget.TimePicker
概述:
用于選擇一天中時間的視圖,支援 24小時及上午/下午模式。小時,分鐘及上午/下午(如果可用)都可以用垂直滾動條來控制。用鍵盤來輸入小時。兩個數的小時數可以通過輸入兩個數字來實作,例如在一定時間内輸入‘1’和‘2’即選擇了12點。分鐘能顯示輸入的單個數字。在AM/PM模式下,使用者可以輸入'a', 'A"或 'p', 'P'來選取。對于對話框視圖,參見TimePickerDialog。
公共方法:
Public Methods | |
int | getBaseline() 傳回視窗空間的文本基準線到其頂邊界的偏移量。如果這個部件不支援基準線對齊, 這個方法傳回-1/。 |
Integer | getCurrentHour() 擷取目前時間的小時部分。 傳回值目前小時(0-23) |
Integer | getCurrentMinute() 擷取目前時間的分鐘部分 |
boolean | is24HourView() 擷取目前系統設定是否是24小時制。 如果是24小時制傳回true,否則傳回false。 |
void | setCurrentHour(Integer currentHour) 設定目前小時 |
void | setCurrentMinute(Integer currentMinute) 設定目前分鐘(0-59) |
void | setEnabled(boolean enabled) 設定可用的視圖狀态。可用的視圖狀态的解釋在子類中改變。 |
void | setIs24HourView(Boolean is24HourView) 設定是24小時還是上午/下午制 |
void | setOnTimeChangedListener(TimePicker.OnTimeChangedListener onTimeChangedListener) 設定時間調整事件的回調函數。 |
應用執行個體
選擇日期和時間:
運作效果圖:
程式代碼:
package com.jph.choosedae;
import java.util.Calendar;
import android.app.Activity;
import android.os.Bundle;
import android.widget.DatePicker;
import android.widget.DatePicker.OnDateChangedListener;
import android.widget.EditText;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;
import android.widget.Toast;
/**
* Description:
* <br/>選擇日期時間
* <br/>本執行個體通過DatePicker(時間選擇器)和
* <br/>TimePicker(日期選擇器)來提供使用者選擇日期和時間
* <br/>為了擷取選擇的日期程式為DatePicker注冊了OnDateChangedListener
* <br/>監聽器,為了擷取選擇的時間程式為TimePicker注冊OnTimeChangedListener
* <br/>監聽器
* @author jph
* Date:2014.20.57
*/
public class ChooseDate extends Activity
{
// 定義5個記錄目前時間的變量
private int year;
private int month;
private int day;
private int hour;
private int minute;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DatePicker datePicker = (DatePicker)
findViewById(R.id.datePicker);
TimePicker timePicker = (TimePicker)
findViewById(R.id.timePicker);
// 擷取目前的年、月、日、小時、分鐘
Calendar c = Calendar.getInstance();
year = c.get(Calendar.YEAR);
month = c.get(Calendar.MONTH);
day = c.get(Calendar.DAY_OF_MONTH);
hour = c.get(Calendar.HOUR);
minute = c.get(Calendar.MINUTE);
// 初始化DatePicker元件,初始化時指定監聽器
datePicker.init(year, month, day, new OnDateChangedListener()
{
@Override
public void onDateChanged(DatePicker arg0, int year
, int month, int day)
{
ChooseDate.this.year = year;
ChooseDate.this.month = month;
ChooseDate.this.day = day;
// 顯示目前日期、時間
showDate(year, month, day, hour, minute);
Toast.makeText(ChooseDate.this,"您選擇的日期:"+year+"年 "
+month+"月 "+day+"日", Toast.LENGTH_SHORT).show();
}
});
// 為TimePicker指定監聽器
timePicker.setOnTimeChangedListener(new OnTimeChangedListener()
{
@Override
public void onTimeChanged(TimePicker view
, int hourOfDay, int minute)
{
ChooseDate.this.hour = hourOfDay;
ChooseDate.this.minute = minute;
// 顯示目前日期、時間
showDate(year, month, day, hour, minute);
Toast.makeText(ChooseDate.this,"您選擇的時間:"+hourOfDay+"時 "
+minute+"分", Toast.LENGTH_SHORT).show();
//
}
});
}
// 定義在EditText中顯示目前日期、時間的方法
private void showDate(int year, int month
, int day, int hour, int minute)
{
EditText show = (EditText) findViewById(R.id.show);
show.setText("您選擇的日期和時間為:" + year + "年"
+ (month + 1) + "月" + day + "日 "
+ hour + "時" + minute + "分");
}
}
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/show"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:editable="false"
android:cursorVisible="false"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="請選擇日期和時間"
/>
<!-- 定義一個DatePicker元件 -->
<DatePicker android:id="@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="200dp"
android:layout_gravity="center_horizontal"
android:startYear="2000"
android:endYear="2050"
android:calendarViewShown="true"
android:spinnersShown="true"
/>
<!-- 定義一個TimePicker元件 -->
<TimePicker android:id="@+id/timePicker"
android:layout_width="wrap_content"
android:layout_height="100dp"
android:layout_gravity="center_horizontal"
/>
</LinearLayout>