DatePicker、TimePicker探究
DatePicker继承自FrameLayout类,日期选择控件的主要功能是向用户提供包含年、月、日的日期数据并允许用户对其修改。如果要捕获用户修改日期选择控件中的数据事件,需要为DatePicker添加OnDateChangedListener监听器。
TimePicker也继承自FrameLayout类。时间选择控件向用户显示一天中的时间(可以为24小时,也可以为AM/PM制),并允许用户进行选择。如果要捕获用户修改时间数据的事件,便需要为TimePicker添加OnTimeChangedListener监听器
一、DatePicker
基本概念:
DatePicker继承自FrameLayout类,日期选择控件的主要功能是向用户提供包含年、月、日的日期数据并允许用户对其修改。如果要捕获用户修改日期选择控件中的数据事件,需要为DatePicker添加OnDateChangedListener监听器。
重要方法:
getDayOfMonth():获取当前Day
getMonth(): 获取当前月(注意:返回数值为0..11,需要自己+1来显示)
getYear() 获取当前年
updateDate(int year, int monthOfYear, int dayOfMonth):更新日
init(int year, int monthOfYear, int dayOfMonth, DatePicker.OnDateChangedListener onDateChangedListener)
参数
year 初始年(译者注:注意使用new Date()初始化年时,需要+1900,如下:date.getYear() + 1900)
monthOfYear 初始月。
dayOfMonth 初始日。
onDateChangedListener 日期改变时通知用户的事件监听,可以为空(null)。
效果图:
参考代码:
(1)main.xml源码
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/btnSet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="onClick"
android:text="I am all set!" />
<DatePicker
android:id="@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<TimePicker
android:id="@+id/timePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
main.xml
(2) 按F11键在Android模拟器上调试应用程序。图4-15显示了DatePicker视图(需要按Ctrl+F11组合键将模拟器的方向改为横向;纵向太窄,不能很好地显示DatePicker)。
(3) 返回Eclipse,在BasicViews4Activity.java文件中添加下列粗体显示的语句:
package net.learn2develop.BasicViews4;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Activity;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.DatePicker;
import android.widget.TimePicker;
import android.widget.Toast;
public class BasicViews4Activity extends Activity {
TimePicker timePicker;
DatePicker datePicker;
int hour, minute;
static final int TIME_DIALOG_ID = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
timePicker = (TimePicker) findViewById(R.id.timePicker);
timePicker.setIs24HourView(true);
// showDialog(TIME_DIALOG_ID);
datePicker = (DatePicker) findViewById(R.id.datePicker);
}
@Override
protected Dialog onCreateDialog(int id)
{
switch (id) {
case TIME_DIALOG_ID:
return new TimePickerDialog(
this, mTimeSetListener, hour, minute, false);
}
return null;
}
private TimePickerDialog.OnTimeSetListener mTimeSetListener =
new TimePickerDialog.OnTimeSetListener()
{
public void onTimeSet(
TimePicker view, int hourOfDay, int minuteOfHour)
{
hour = hourOfDay;
minute = minuteOfHour;
SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm aa");
Date date = new Date(0,0,0, hour, minute);
String strDate = timeFormat.format(date);
Toast.makeText(getBaseContext(),
"You have selected " + strDate,
Toast.LENGTH_SHORT).show();
}
};
public void onClick(View view) {
Toast.makeText(getBaseContext(),
"Date selected:" + (datePicker.getMonth() + 1) +
"/" + datePicker.getDayOfMonth() +
"/" + datePicker.getYear() + "\n" +
"Time selected:" + timePicker.getCurrentHour() +
":" + timePicker.getCurrentMinute(),
Toast.LENGTH_SHORT).show();
}
}
BasicViews4Activity.java
(4) 按F11键在Android模拟器上调试应用程序。一旦设置了日期,单击Button将显示设置的日期,如图4-16所示。
示例说明:
通过调用getMonth()、getDayOfMonth()和getYear()方法来分别获取月份、日子和年份:
"Date selected:" + (datePicker.getMonth() + 1) +
"/" + datePicker.getDayOfMonth() +
"/" + datePicker.getYear() + "\n" +
注意,getMonth()方法返回0代表一月、返回1代表二月,依次类推。因此,需要将此方法返回的结果加1来获得对应的月份数。
使用对话框显示DatePicker视图
(1) 使用前述“试一试”中创建的BasicViews4项目,在BasicViews4Activity.java文件中添加下列粗体显示的语句:
package net.learn2develop.BasicViews4;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
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.DatePicker;
import android.widget.TimePicker;
import android.widget.Toast;
public class BasicViews4Activity extends Activity {
TimePicker timePicker;
DatePicker datePicker;
int hour, minute;
int yr, month, day;
static final int TIME_DIALOG_ID = 0;
static final int DATE_DIALOG_ID = 1;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
timePicker = (TimePicker) findViewById(R.id.timePicker);
timePicker.setIs24HourView(true);
// showDialog(TIME_DIALOG_ID);
datePicker = (DatePicker) findViewById(R.id.datePicker);
//---get the current date---
Calendar today = Calendar.getInstance();
yr = today.get(Calendar.YEAR);
month = today.get(Calendar.MONTH);
day = today.get(Calendar.DAY_OF_MONTH);
showDialog(DATE_DIALOG_ID);
}
@Override
protected Dialog onCreateDialog(int id)
{
switch (id) {
case TIME_DIALOG_ID:
return new TimePickerDialog(
this, mTimeSetListener, hour, minute, false);
case DATE_DIALOG_ID:
return new DatePickerDialog(
this, mDateSetListener, yr, month, day);
}
return null;
}
private DatePickerDialog.OnDateSetListener mDateSetListener =
new DatePickerDialog.OnDateSetListener()
{
public void onDateSet(
DatePicker view, int year, int monthOfYear, int dayOfMonth)
{
yr = year;
month = monthOfYear;
day = dayOfMonth;
Toast.makeText(getBaseContext(),
"You have selected : " + (month + 1) +
"/" + day + "/" + year,
Toast.LENGTH_SHORT).show();
}
};
private TimePickerDialog.OnTimeSetListener mTimeSetListener =
new TimePickerDialog.OnTimeSetListener()
{
public void onTimeSet(
TimePicker view, int hourOfDay, int minuteOfHour)
{
hour = hourOfDay;
minute = minuteOfHour;
SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm aa");
Date date = new Date(0,0,0, hour, minute);
String strDate = timeFormat.format(date);
Toast.makeText(getBaseContext(),
"You have selected " + strDate,
Toast.LENGTH_SHORT).show();
}
};
public void onClick(View view) {
Toast.makeText(getBaseContext(),
"Date selected:" + (datePicker.getMonth() + 1) +
"/" + datePicker.getDayOfMonth() +
"/" + datePicker.getYear() + "\n" +
"Time selected:" + timePicker.getCurrentHour() +
":" + timePicker.getCurrentMinute(),
Toast.LENGTH_SHORT).show();
}
}
BasicViews4Activity.java
(2) 按F11键在Android模拟器上调试应用程序。当活动加载时,可以看到DatePicker显示在一个对话框窗口中(如图4-17所示)。设定好一个日期并单击Set按钮。Toast窗口将显示出您刚刚设置好的日期。
示例说明
DatePicker和TimePicker的工作原理是一致的。当设置日期时,它将触发onDateSet()方法,从中可以获取由用户设定的日期:
public void onDateSet(
DatePicker view, int year, int monthOfYear, int dayOfMonth)
{
yr = year;
month = monthOfYear;
day = dayOfMonth;
Toast.makeText(getBaseContext(),
"You have selected : " + (month + 1) +
"/" + day + "/" + year,
Toast.LENGTH_SHORT).show();
}
注意,在显示对话框之前,需要初始化3个变量—yr、month和day:
//---get the current date---
Calendar today = Calendar.getInstance();
yr = today.get(Calendar.YEAR);
month = today.get(Calendar.MONTH);
day = today.get(Calendar.DAY_OF_MONTH);
showDialog(DATE_DIALOG_ID);
如果不这样做,当在运行时创建一个DatePickerDialog类的实例时,将发生非法参数异常(current should be >= start and <= end)。
二、TimePicker
基本概念:
TimePicker也继承自FrameLayout类。时间选择控件向用户显示一天中的时间(可以为24小时,也可以为AM/PM制),并允许用户进行选择。如果要捕获用户修改时间数据的事件,便需要为TimePicker添加OnTimeChangedListener监听器
用于选择一天中时间的视图,支持 24小时及上午/下午模式。小时,分钟及上午/下午(如果可用)都可以用垂直滚动条来控制。用键盘来输入小时。两个数的小时数可以通过输入两个数字来实现,例如在一定时间内输入‘1’和‘2’即选择了12点。分钟能显示输入的单个数字。在AM/PM模式下,用户可以输入'a', 'A"或 'p', 'P'来选取。对于对话框视图,参见TimePickerDialog。
重要方法:
setCurrentMinute(Integer currentMinute) 设置当前时间的分钟
getCurrentMinute() 获取当前时间的分钟
setEnabled(boolean enabled) 设置当前视图是否可以编辑。
m_TimePicker.setIs24HourView(true); 设置为24小时制显示
setOnTimeChangedListener(TimePicker.OnTimeChangedListener onTimeChangedListener)当时间改变时调用
实例:
timePicker = (TimePicker)findViewById(R.id.timePicker);
timePicker.setCurrentHour(16);
timePicker.setCurrentMinute(10);
updateDisplay(16,10);
timePicker.setOnTimeChangedListener(this);
效果图:
公共方法:
三、公共方法
public int getBaseline ()
返回窗口空间的文本基准线到其顶边界的偏移量。如果这个部件不支持基准线对齐,这个方法返回-1/。
返回值
基准线的偏移量,如果不支持基准线对齐则返回-1。
public Integer getCurrentHour ()
获取当前时间的小时部分。
返回值
当前小时(0-23)
public Integer getCurrentMinute ()
获取当前时间的分钟部分。
返回值
当前分钟。
public boolean is24HourView ()
获取当前系统设置是否是24小时制。
返回值
如果是24小时制返回true,否则返回false。
public void setCurrentHour (Integer currentHour)
设置当前小时。
public void setCurrentMinute (Integer currentMinute)
设置当前分钟(0-59)。
public void setEnabled (boolean enabled)
设置可用的视图状态。可用的视图状态的解释在子类中改变。
参数
enabled 如果可用为true,否则为false。
public void setIs24HourView (Boolean is24HourView)
设置是24小时还是上午/下午制。
参数
is24HourView True表示 24小时制. False表示上午/下午制.
public void setOnTimeChangedListener (TimePicker.OnTimeChangedListener onTimeChangedListener)
设置时间调整事件的回调函数。
参数
onTimeChangedListener 回调函数,不能为空。
公共方法参考
受保护方法:
protected void onRestoreInstanceState (Parcelable state)
允许一个视图回复到之前用onSaveInstanceState()保存的状态,state参数不能为空。
参数
state 之前调用onSaveInstanceState()返回的状态。
protected Parcelable onSaveInstanceState ()
用来允许一个视图保存当前的内部状态,之后可以创建新的实例应用相同的状态。状态信息不能包含常量或在之后重新构造。例如,你永远不能保存在屏幕上的当前位置,因为当创建一个新的视图时,它将会被放置到它的层次结构中,它的位置会被重新计算。
你可以存储到这里的一些例子:一个文本框中当前光标的位置(但通常不是文字本身,文字通常保存在内容提供者(content provider)或其他持久的储存中),一个列表视图中的当前选中项。
返回值
返回一个包含视图当前状态的Parcelable对象,或没有什么状态保存时返回null。默认实现返回null。
protected举例
参考代码:
(1) 打开Eclipse,创建一个名为BasicViews4的Android项目。
(2) 修改位于res/layout文件夹下的main.xml文件,添加下列粗体显示的行:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TimePicker android:id="@+id/timePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
<Button android:id="@+id/btnSet"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="I am all set!"
android:onClick="onClick" />
</LinearLayout>
main.xml
(3) 在Eclipse中选择该项目的名称并按F11键在Android模拟器中调试应用程序。图4-12显示了运用中的TimePicker。除了单击加(+)和减(—)按钮外,还可以使用设备上的数字键盘来修改小时和分钟,单击AM按钮在AM和PM之间切换。
(4) 返回Eclipse,在BasicViews4Activity.java文件中添加下列粗体显示的语句:
package net.learn2develop.BasicViews4;
package net.learn2develop.BasicViews4;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TimePicker;
import android.widget.Toast;
public class BasicViews4Activity extends Activity {
TimePicker timePicker;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
timePicker = (TimePicker) findViewById(R.id.timePicker);
timePicker.setIs24HourView(true);
}
public void onClick(View view) {
Toast.makeText(getBaseContext(),
"Time selected:" +
timePicker.getCurrentHour() +
":" + timePicker.getCurrentMinute(),
Toast.LENGTH_SHORT).show();
}
}
BasicViews4Activity.java
(5) 按F11键在Android模拟器上调试应用程序。这一次,TimePicker将以24小时格式显示。单击Button将显示您在TimePicker中设置好的时间(如图4-13所示)。
示例说明
TimePicker显示了一个可以让用户设置时间的标准用户界面。默认情况下,它以AM/PM格式显示时间。如果想要以24小时格式来显示,可以使用setIs24HourView()方法。
为了以编程方式获得用户设置的时间,可以使用getCurrentHour()和getCurrentMinute()方法:
Toast.makeText(getBaseContext(),
"Time selected:" +
timePicker.getCurrentHour() +
":" + timePicker.getCurrent
Minute(),
Toast.LENGTH_SHORT).show();
注意:getCurrentHour()方法总是返回24小时格式的时间,也就是返回一个0~23之间的值。
虽然可以在一个活动中显示TimePicker,但更好的方法是在一个对话框窗口中显示它。这样一旦设置好时间,TimePicker就会消失,不再占据活动中的任何空间。下面的“试一试”展示了如何做到这一点。
使用对话框显示TimePicker视图:
(1) 所创建的BasicViews4项目,按如下所示修改
package net.learn2develop.BasicViews4;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.Activity;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.os.Bundle;
import android.view.View;
import android.widget.TimePicker;
import android.widget.Toast;
public class BasicViews4Activity extends Activity {
TimePicker timePicker;
int hour, minute;
static final int TIME_DIALOG_ID = 0;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
timePicker = (TimePicker) findViewById(R.id.timePicker);
timePicker.setIs24HourView(true);
showDialog(TIME_DIALOG_ID);
}
@Override
protected Dialog onCreateDialog(int id)
{
switch (id) {
case TIME_DIALOG_ID:
return new TimePickerDialog(
this, mTimeSetListener, hour, minute, false);
}
return null;
}
private TimePickerDialog.OnTimeSetListener mTimeSetListener =
new TimePickerDialog.OnTimeSetListener()
{
public void onTimeSet(
TimePicker view, int hourOfDay, int minuteOfHour)
{
hour = hourOfDay;
minute = minuteOfHour;
SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm aa");
Date date = new Date(0,0,0, hour, minute);
String strDate = timeFormat.format(date);
Toast.makeText(getBaseContext(),
"You have selected " + strDate,
Toast.LENGTH_SHORT).show();
}
};
public void onClick(View view) {
Toast.makeText(getBaseContext(),
"Time selected:" +
timePicker.getCurrentHour() +
":" + timePicker.getCurrentMinute(),
Toast.LENGTH_SHORT).show();
}
}
BasicViews4Activity.java
(2) 按F11键在Android模拟器中调试应用程序。当活动被加载时,可以看到TimePicker显示在一个对话框窗口内(如图4-14所示)。设置一个时间,然后单击Set按钮,将看到Toast窗口显示了您刚刚设置好的时间。
示例说明
为了显示一个对话框窗口,可以使用showDialog()方法,传入一个ID来标识对话框的源:
showDialog(TIME_DIALOG_ID);
当调用showDialog()方法时,onCreateDialog()方法将被调用:
@Override
protected Dialog onCreateDialog(int id)
{
switch (id) {
case TIME_DIALOG_ID:
return new TimePickerDialog(
this, mTimeSetListener, hour, minute, false);
}
return null;
}
这里,创建了一个TimePickerDialog类的新实例,给它传递了当前上下文、回调函数、初始的小时和分钟,以及TimePicker是否以24小时格式显示。
当用户单击TimePicker对话框窗口中的Set按钮时,将调用onTimeSet()方法:
private TimePickerDialog.OnTimeSetListener mTimeSetListener =
new TimePickerDialog.OnTimeSetListener()
{
public void onTimeSet(
TimePicker view, int hourOfDay, int minuteOfHour)
{
hour = hourOfDay;
minute = minuteOfHour;
SimpleDateFormat timeFormat = new SimpleDateFormat("hh:mm aa");
Date date = new Date(0,0,0, hour, minute);
String strDate = timeFormat.format(date);
Toast.makeText(getBaseContext(),
"You have selected " + strDate,
Toast.LENGTH_SHORT).show();
}
};
这里,onTimeSet()方法将包含用户分别通过hourOfDay和minuteOfHour参数设置的小时和分钟。
DatePicker和TimePicker的应用
模拟日期与时间选择控件的用法
目录结构:
main.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">
<DatePicker android:id="@+id/datePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"/>
<EditText android:id="@+id/dateEt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:cursorVisible="false"
android:editable="false"/>
<TimePicker android:id="@+id/timePicker"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal"/>
<EditText android:id="@+id/timeEt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:cursorVisible="false"
android:editable="false"/>
</LinearLayout>
main.xml
DpTpActivity类
package com.ljq.activity;
import java.util.Calendar;
import android.app.Activity;
import android.os.Bundle;
import android.widget.DatePicker;
import android.widget.EditText;
import android.widget.TimePicker;
import android.widget.DatePicker.OnDateChangedListener;
import android.widget.TimePicker.OnTimeChangedListener;
public class DpTpActivity extends Activity {
private EditText dateEt=null;
private EditText timeEt=null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
dateEt=(EditText)findViewById(R.id.dateEt);
timeEt=(EditText)findViewById(R.id.timeEt);
DatePicker datePicker=(DatePicker)findViewById(R.id.datePicker);
TimePicker timePicker=(TimePicker)findViewById(R.id.timePicker);
Calendar calendar=Calendar.getInstance();
int year=calendar.get(Calendar.YEAR);
int monthOfYear=calendar.get(Calendar.MONTH);
int dayOfMonth=calendar.get(Calendar.DAY_OF_MONTH);
datePicker.init(year, monthOfYear, dayOfMonth, new OnDateChangedListener(){
public void onDateChanged(DatePicker view, int year,
int monthOfYear, int dayOfMonth) {
dateEt.setText("您选择的日期是:"+year+"年"+(monthOfYear+1)+"月"+dayOfMonth+"日。");
}
});
timePicker.setOnTimeChangedListener(new OnTimeChangedListener(){
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
timeEt.setText("您选择的时间是:"+hourOfDay+"时"+minute+"分。");
}
});
}
}
DpTpActivity
运行结果:
使用对话框显示日期、时间视图
效果图:
main.xml布局文件:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/dateText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/dateButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="设置日期"
/>
<TextView
android:id="@+id/timeText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/timeButton"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="设置时间"
/>
</LinearLayout>
main.xml
TextAndridActivity.java类
package com.tiantian.test;
import java.util.Calendar;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.app.Dialog;
import android.app.TimePickerDialog;
import android.app.TimePickerDialog.OnTimeSetListener;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.net.Uri;
import android.os.Bundle;
import android.os.SystemClock;
import android.util.DisplayMetrics;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Chronometer;
import android.widget.DatePicker;
import android.widget.DatePicker.OnDateChangedListener;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.TimePicker;
import android.widget.TimePicker.OnTimeChangedListener;
import android.widget.ZoomControls;
public class TextAndridActivity extends Activity {
/** Called when the activity is first created. */
private TextView dateText;
private TextView timeText;
private Button dateButton;
private Button timeButton;
private int year;
private int monthOfYear;
private int dayOfMonth;
private int hour;
private int minute;
//声明一个独一无二的标识,来作为要显示DatePicker的Dialog的ID
final static int DATE_DIALOG_ID = 1;
//声明一个独一无二的标识,来作为要显示TimePicker的Dialog的ID
final static int TIME_DIALOG_ID = 2;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
dateText = (TextView) findViewById(R.id.dateText);
timeText = (TextView) findViewById(R.id.timeText);
dateButton = (Button) findViewById(R.id.dateButton);
dateButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//调用Activity类的方法来显示Dialog:调用这个方法会允许Activity管理该Dialog的生命周期,
//并会调用 onCreateDialog(int)回调函数来请求一个Dialog
showDialog(DATE_DIALOG_ID);
}
});
timeButton = (Button) findViewById(R.id.timeButton);
timeButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//调用Activity类的方法来显示Dialog:调用这个方法会允许Activity管理该Dialog的生命周期,
//并会调用 onCreateDialog(int)回调函数来请求一个Dialog
showDialog(TIME_DIALOG_ID);
}
});
//得到当前日期和时间(作为初始值)
Calendar calendar = Calendar.getInstance();
year = calendar.get(Calendar.YEAR);
monthOfYear = calendar.get(Calendar.MONTH);
dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);
hour = calendar.get(Calendar.HOUR_OF_DAY);
minute = calendar.get(Calendar.MINUTE);
}
//当Activity调用showDialog函数时会触发该函数的调用:
@Override
protected Dialog onCreateDialog(int id) {
// TODO Auto-generated method stub
switch(id){
case DATE_DIALOG_ID:
return new DatePickerDialog(this, new OnDateSetListener() {
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO Auto-generated method stub
dateText.setText(year + "年" + (monthOfYear + 1) + "月" + dayOfMonth + "日");
}
}, year, monthOfYear, dayOfMonth);
case TIME_DIALOG_ID:
return new TimePickerDialog(this, new OnTimeSetListener() {
@Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
// TODO Auto-generated method stub
timeText.setText(hourOfDay + "时" + minute + "分");
}
}, hour, minute, true);
}
return null;
}
}
TextAndridActivity.java
java类