marsAndroid学习——常见控件DatePicker、DatePickerDialog和TimePicker、TimePickerDialog


笔记摘要:

对于  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需要实现

另外在这个类中主要定义了一些和窗口和保存时间的有关操作,

getDatePicker()

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


posted @ 2012-11-16 17:06  积小流,成江海  阅读(517)  评论(0编辑  收藏  举报