对于 DatePicker和DatePickerDialog与TimePicker和TimePickerDialog是类似的,包括创建方法,一个用于指定年月日并提供操作方法,
后者用于操作时分秒,也提供了操作这些时间的方法。
不过在这里要说明的是:在 Android3.0之后,出现了DialogFragment,使用它同样可以帮我们创建DatePickerDialog和TimePickerDialog,当然他们的创建
方式是一模一样的。下面先介绍一下相关概念方法,然后分别使用传统的方式和DialogFragment分别来创建一个DatePickeriDialog和TimePickerDialog,
当然传统方式和DialogFragment的方式所创建的Dialog,界面也是不一样的,这里只贴出效果图进行对比
DatePicker是一个显示日期的窗口,可以用于选定年月日的spinner或者是日历的显示,年月日的spinner和日历的显示是默认一起显示的,用户也可以根据自己的情况来指定要显示的部分。而且日期的范围也可以自己设置。DatePicker为我们提供了一些获取、更新时间的操作:
getMonth()、getMinDate()、getDayOfMonth()、getCalendarView()、setSpinnersShown(boolean shown) 、updateDate(int year, int month, int dayOfMonth)
DatePickerDialog是一个包含DatePicker的简单对话框,它包含一个内部类接口:DatePickerDialog.OnDateSetListener需要实现
另外在这个类中主要定义了一些和窗口和保存时间的有关操作,
getDatePicker()、
onClick(DialogInterfacedialog, int which)、
onDateChanged(DatePickerview, int year, intmonth, int day)、onRestoreInstanceState(BundlesavedInstanceState)、恢复之前保存到状态
Bundle onSaveInstanceState(),将该时间作为一个实例保存到Bundle对象中
updateDate(int year, int monthOfYear, int dayOfMonth)更新当前日期
1.声明一个监听器,使用匿名内部类实现DatePickerDialog.OnDateSetListener
2.复写onCreateDialog方法,
3.在按钮监听器中调用showDialog
<Button android:id="@+id/showDatePicker" android:text="showDatePickerDialog" android:layout_width="fill_parent" android:layout_height="wrap_content" android:onClick="showDialog" />
package com.example.mydatepicker; import android.app.Activity; import android.app.DatePickerDialog; import android.app.Dialog; import android.app.DatePickerDialog.OnDateSetListener; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.DatePicker; /*DatePickerDialog创建步骤: *1.声明一个监听器,使用匿名内部类实现DatePickerDialog.OnDateSetListener *2.复写onCreateDialog方法,根据指定ID创建并返回一个DatePickerDialog实例对象 *3.在Button监听器中调用showDialog *注意:月份是0-11 * */ public class DatePickerActivity extends Activity { //该常量用于标识DatePickerDialog private static final int DATE_PICKER_ID = 1; private Button showDatePickerBtn = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_date_picker); showDatePickerBtn = (Button) findViewById(R.id.showDatePicker); showDatePickerBtn.setOnClickListener(new DatePickerDialogBtnListener()); } private final class DatePickerDialogBtnListener implements OnClickListener{ public void onClick(View v) { //此方法用于显示DatePickerDialog showDialog(DATE_PICKER_ID); }} //监听器,用于监听用户点下DatePikerDialog的set按钮时,所设置的年月日 DatePickerDialog.OnDateSetListener onDateSetlistener = new OnDateSetListener(){ public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) { System.out.println(year + "-" + monthOfYear + "-" + dayOfMonth); }}; //复写onCreateDialog方法,该方法在Activity创建Dialog的时候调用 @Override protected Dialog onCreateDialog(int id, Bundle args) { switch(id){ case DATE_PICKER_ID: return new DatePickerDialog(this,onDateSetlistener,2012,10,16); } return null; } }
对时间的显示更具体,和DatePicker比较,TimePicker主要体现在一天内具体的时间表示,比如:hour, minute, AM/PM,其中AM/PM可以
通过spinners来控制,而时间可以通过键盘输入来指定,同样的提供了一些对于具体时间的操作方法:
getCurrentHour()、getCurrentMinute()、setCurrentHour(Integer currentHour)、
setCurrentMinute(Integer currentMinute)、i
sEnabled()、setEnabled(boolean enabled)
setIs24HourView(Boolean is24HourView)、
setOnTimeChangedListener(TimePicker.OnTimeChangedListener onTimeChangedListener)
TimePickerDialog和DatePickerDialog一样有内部类接口TimePickerDialog.OnTimeSetListener需要实现,下面是该类提供的一些方法:
onRestoreInstanceState(Bundle savedInstanceState)、从Bundle中恢复先前的状态
Bundle onSaveInstanceState()。将该状态保存到一个Bundle对象中
updateTime(int hourOfDay, intminutOfHour)
传统方式创建一个TimePickerDialog
和创建一个DateTimePicker的步骤是一样的,就不再赘述。
1、定义一个TimePickerFragment类:需要继承DialogFragment并实现OnTimeSetListener
2、复写onCreateDialog和onTimeSet,并在onCreateDialog中返回一个TimePickerDialog实例对象,onTimeSet为用户点击确定后要执行的代码
3、定义一个用于显示TimePickerDialog的方法,生成一个TimePickerFragment,
调用show方法
<Button android:id="@+id/showDatePicker" android:text="showDatePickerDialog" android:layout_width="fill_parent" android:layout_height="wrap_content" android:onClick="showDialog" />
package com.example.mytimepicker; import java.util.Calendar; import android.annotation.TargetApi; import android.app.Activity; import android.app.Dialog; import android.app.DialogFragment; import android.app.TimePickerDialog; import android.app.TimePickerDialog.OnTimeSetListener; import android.os.Bundle; import android.text.format.DateFormat; import android.view.View; import android.widget.TimePicker; public class TimePickerActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.time_picker); } //该函数用于显示TimePickerDialog public void showTimePickerDialog(View view) { //生成一个TimePickerFragment DialogFragment newFragment = new TimePickerFragment(); //显示TimePickerDialog,第一个参数为:newFragment将要添加到的FragmentManager,第二个参数为标识 newFragment.show(getFragmentManager(), "timePicker"); } } //定义一个TimePickerDialog,需要,继承DialogFragment,并实现OnTimeSetListener class TimePickerFragment extends DialogFragment implements OnTimeSetListener{ //复写onCreateDialog方法并一个TimePickerDialog实例对象 @Override public Dialog onCreateDialog(Bundle savedInstanceState) { // 使用当前时间作为缺省值 final Calendar c = Calendar.getInstance(); int hour = c.get(Calendar.HOUR_OF_DAY); int minute = c.get(Calendar.MINUTE); //参数为:context Parent, OnTimeSetListener,小时,分钟, boolean :是否是24小时制 return new TimePickerDialog(getActivity(), this, hour, minute, DateFormat.is24HourFormat(getActivity())); } //当用户点击确定后将要执行的动作 public void onTimeSet(TimePicker view, int hourOfDay, int minute) { // TODO Auto-generated method stub System.out.println("hour:"+hourOfDay+" minute:"+minute); } }