笔记摘要:
对于 DatePicker和DatePickerDialog与TimePicker和TimePickerDialog是类似的,包括创建方法,一个用于指定年月日并提供操作方法,
后者用于操作时分秒,也提供了操作这些时间的方法。
不过在这里要说明的是:在 Android3.0之后,出现了DialogFragment,使用它同样可以帮我们创建DatePickerDialog和TimePickerDialog,当然他们的创建
方式是一模一样的。下面先介绍一下相关概念方法,然后分别使用传统的方式和DialogFragment分别来创建一个DatePickeriDialog和TimePickerDialog,
当然传统方式和DialogFragment的方式所创建的Dialog,界面也是不一样的,这里只贴出效果图进行对比
DatePicker和DatePickerDialog
DatePicker
DatePicker是一个显示日期的窗口,可以用于选定年月日的spinner或者是日历的显示,年月日的spinner和日历的显示是默认一起显示的,用户也可以根据自己的情况来指定要显示的部分。而且日期的范围也可以自己设置。DatePicker为我们提供了一些获取、更新时间的操作:
getMonth()、getMinDate()、getDayOfMonth()、getCalendarView()、setSpinnersShown(boolean shown) 、updateDate(int year, int month, int dayOfMonth)
DatePickerDialog
DatePickerDialog是一个包含DatePicker的简单对话框,它包含一个内部类接口:DatePickerDialog.OnDateSetListener需要实现
另外在这个类中主要定义了一些和窗口和保存时间的有关操作,
onClick(DialogInterfacedialog, int which)、
onDateChanged(DatePickerview, int year, intmonth, int day)、onRestoreInstanceState(BundlesavedInstanceState)、恢复之前保存到状态
Bundle onSaveInstanceState(),将该时间作为一个实例保存到Bundle对象中
updateDate(int year, int monthOfYear, int dayOfMonth)更新当前日期
DatePickerDialog的使用:
1.声明一个监听器,使用匿名内部类实现DatePickerDialog.OnDateSetListener
2.复写onCreateDialog方法,
3.在按钮监听器中调用showDialog
DatePickerDialog效果图
代码体现:
在布局文件中添加一个按钮
<Button
android:id="@+id/showDatePicker"
android:text="showDatePickerDialog"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="showDialog"
/>
DatePickerActivity.java 代码
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;
}
}
TimePicker和TimePickerDialog
TimePicker
对时间的显示更具体,和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
TimePickerDialog和DatePickerDialog一样有内部类接口TimePickerDialog.OnTimeSetListener需要实现,下面是该类提供的一些方法:
onRestoreInstanceState(Bundle savedInstanceState)、从Bundle中恢复先前的状态
Bundle onSaveInstanceState()。将该状态保存到一个Bundle对象中
updateTime(int hourOfDay, intminutOfHour)
创建 一个TimePickerDialog的两种方式:
传统方式创建一个TimePickerDialog
和创建一个DateTimePicker的步骤是一样的,就不再赘述。
使用DialogFragment创建一个TimePickerDialog
1、定义一个TimePickerFragment类:需要继承DialogFragment并实现OnTimeSetListener
2、复写onCreateDialog和onTimeSet,并在onCreateDialog中返回一个TimePickerDialog实例对象,onTimeSet为用户点击确定后要执行的代码
3、定义一个用于显示TimePickerDialog的方法,生成一个TimePickerFragment,
调用show方法
传统方式的TimePickerDialog效果图
使用DialogFragment创建的TimePickerDialog效果图:
代码体现
在布局文件中添加一个按钮
<Button
android:id="@+id/showDatePicker"
android:text="showDatePickerDialog"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:onClick="showDialog"
/>
TimePickerActivity.java代码
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);
}
}
以上学习来自marsAndroid视频和论坛:http://www.mars-droid.com/bbs/forum.php