Android学习——DatePocker和TimePicker
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源码
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?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>
(2) 按F11键在Android模拟器上调试应用程序。图4-15显示了DatePicker视图(需要按Ctrl+F11组合键将模拟器的方向改为横向;纵向太窄,不能很好地显示DatePicker)。
(3) 返回Eclipse,在BasicViews4Activity.java文件中添加下列粗体显示的语句:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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(); } }
(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文件中添加下列粗体显示的语句:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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(); } }
(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);
效果图:
公共方法:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
三、公共方法 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 回调函数,不能为空。
受保护方法:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
protected void onRestoreInstanceState (Parcelable state) 允许一个视图回复到之前用onSaveInstanceState()保存的状态,state参数不能为空。 参数 state 之前调用onSaveInstanceState()返回的状态。 protected Parcelable onSaveInstanceState () 用来允许一个视图保存当前的内部状态,之后可以创建新的实例应用相同的状态。状态信息不能包含常量或在之后重新构造。例如,你永远不能保存在屏幕上的当前位置,因为当创建一个新的视图时,它将会被放置到它的层次结构中,它的位置会被重新计算。 你可以存储到这里的一些例子:一个文本框中当前光标的位置(但通常不是文字本身,文字通常保存在内容提供者(content provider)或其他持久的储存中),一个列表视图中的当前选中项。 返回值 返回一个包含视图当前状态的Parcelable对象,或没有什么状态保存时返回null。默认实现返回null。
参考代码:
(1) 打开Eclipse,创建一个名为BasicViews4的Android项目。
(2) 修改位于res/layout文件夹下的main.xml文件,添加下列粗体显示的行:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?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>
(3) 在Eclipse中选择该项目的名称并按F11键在Android模拟器中调试应用程序。图4-12显示了运用中的TimePicker。除了单击加(+)和减(—)按钮外,还可以使用设备上的数字键盘来修改小时和分钟,单击AM按钮在AM和PM之间切换。
(4) 返回Eclipse,在BasicViews4Activity.java文件中添加下列粗体显示的语句:
package net.learn2develop.BasicViews4;
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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(); } }
(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项目,按如下所示修改
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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(); } }
(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布局文件
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?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>
DpTpActivity类
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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+"分。"); } }); } }
运行结果:
使用对话框显示日期、时间视图
效果图:
main.xml布局文件:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
<?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>
TextAndridActivity.java类
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
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; } }
java类