android中动态输入日期与时间

DatePickerTimePicker应用

范例说明

许多的网络服务,例如网络订票、网络订房、网络订旅游行程或在注册会员输入基本数据时,都会需要用户输入日期与时间格式的数据,有些网站会提供贴心的小功能:直接在万年历上来选择日期与时间,选择完毕,就会自动将日期与时间带入需要填写的字段中。

Android有没有提供类似的组件可以实现这样的功能呢?答案是肯定的!在这个范例中,将示范以Android API中提供的DatePickerTimePicker两种对象来实现动态输入日期与时间的功能。

例中使用了DatePickerTimePickerTextView三种对象,以TextView来显示日期与时间,默认带入目前系统的日期与时间,DatePickerTimePicker可让用户动态调整日期与时间,当用户调整了DatePicker的日期或TimePicker时间时,则TextView中所显示的日期与时间也会跟着改变。

范例程序

src/irdc.ex04_15/EX04_15.java

程序中以updateDisplay()这个方法来设置TextView中所显示的日期时间,以java.util.Calendar对象来取得目前的系统时间,并预先带入TextView中。

当用户更改了DatePicker里的年、月、日时,将触发DatePickeronDateChange()事件,运行updateDisplay()来重新设置TextView中显示的日期;同样的原理,当用户更改了TimePicker里的时间,会触发TimePickeronTimeChange()事件,运行updateDisplay()来重新设置TextView中显示的时间。

 

/* import程序略 */

import android.widget.DatePicker;

import android.widget.TimePicker;

 

public class EX04_15 extends Activity

{

  /*声明日期及时间变量*/

  private int mYear;

  private int mMonth;

  private int mDay;

  private int mHour;

  private int mMinute;

  /*声明对象变量*/

  TextView tv;

  TimePicker tp;

  DatePicker dp;

 

  /** Called when the activity is first created. */

  @Override

  public void onCreate(Bundle savedInstanceState)

  {

    /*取得目前日期与时间*/

    Calendar c=Calendar.getInstance();

    mYear=c.get(Calendar.YEAR);

    mMonth=c.get(Calendar.MONTH);

    mDay=c.get(Calendar.DAY_OF_MONTH);

    mHour=c.get(Calendar.HOUR_OF_DAY);

    mMinute=c.get(Calendar.MINUTE);

   

    super.onCreate(savedInstanceState);

    /*加载main.xml Layout */

    setContentView(R.layout.main);   

   

    /*取得TextView对象,并调用updateDisplay()

      来设置显示的初始日期时间*/

    tv= (TextView) findViewById(R.id.showTime);

    updateDisplay();

   

    /*取得DatePicker对象,以init()

      设置初始值与onDateChangeListener() */

    dp=(DatePicker)findViewById(R.id.dPicker);

    dp.init(mYear,mMonth,mDay,new DatePicker.OnDateChangedListener()

    {

      @Override

      public void onDateChanged(DatePicker view,int year,

                          int monthOfYear,int dayOfMonth)

      {

        mYear=year;

        mMonth= monthOfYear;

        mDay=dayOfMonth;

        /*调用updateDisplay()来改变显示日期*/

        updateDisplay();

      }

    });

   

    /*取得TimePicker对象,并设置为24小时制显示*/

    tp=(TimePicker)findViewById(R.id.tPicker);

    tp.setIs24HourView(true);

   

    /*setOnTimeChangedListener,并重写onTimeChanged event*/

    tp.setOnTimeChangedListener(new TimePicker.OnTimeChangedListener()

    {

      @Override

      public void onTimeChanged(TimePicker view,

                              int hourOfDay,

                              int minute)

      {

        mHour=hourOfDay;

        mMinute=minute;

        /*调用updateDisplay()来改变显示时间*/

        updateDisplay();

      }

    });

  }

   

  /*设置显示日期时间的方法*/

  private void updateDisplay()

  {

    tv.setText(

      new StringBuilder().append(mYear).append("/")

                         .append(format(mMonth + 1)).append("/")

                         .append(format(mDay)).append(" ")

                         .append(format(mHour)).append(":")

                         .append(format(mMinute))

    );

  }

 

  /*日期时间显示两位数的方法*/

  private String format(int x)

  {

    String s=""+x;

    if(s.length()==1) s="0"+s;

    return s;

  }

}

 

扩展学习

本范例的重点在于学习如何使用DatePickerTimePicker对象来达成动态调整日期与时间的功能,读者应该可以发现,在范例中,DatePicker实现OnDateChangedListener()的方法与TimePicker实现OnTimeChangedListener()的方法是不太相同的。DatePicker对象以init()这个方法来指定DatePicker初始的年、月、日及OnDateChangedListener()的事件;而TimePicker对象则是直接以setOnTimeChangedListener()事件来处理时间改变时程序要做的操作。

在旧版的Android SDK1.0r2版以前的SDK版本)中,DatePicker对象有提供setOnDate ChangedListener()这个方法,但是在新版的SDK1.0r2),这个方法被删除了,所以要实现OnDate ChangedListener()时,必须以init()方式来重写OnDateChangedListener();而TimePicker则直接以 setOnTimeChangedListener()来实现即可。

Android API另外提供了其他的对象来实现动态修改日期时间的功能:DatePickerDialogTimePickerDialog。这两种类型的对象最大的差别在于DatePickerTimePicker是直接显示在屏幕画面上,而DatePickerDialogTimePickerDialog对象则是以弹出Dialog的方式来显示,如图4-16所示。

DatePickerDialogTimePickerDialog的实现方式又如何呢?以下提供简单的范例供各位参考:

 

/* 取得更改日期的Button,添加onClickListener */

Button dButton=(Button)findViewById(R.id.dPicker);

dButton.setOnClickListener(new View.OnClickListener()

{

  public void onClick(View v)

  {

    /* onClick时跳出DatePickerDialog */

    new DatePickerDialog(EX04_15_1.this,

        new DatePickerDialog.OnDateSetListener()

        {   

          public void onDateSet(DatePicker view,int year,

                                int monthOfYear,int dayOfMonth)

          {

            /* 这里放更新日期的方法 */

          }

        },mYear,mMonth,mDay).show();

  }

});

   

/* 取得更改时间的Button,添加onClickListener */

Button tButton=(Button)findViewById(R.id.tPicker);

tButton.setOnClickListener(new View.OnClickListener()

{

  public void onClick(View v)

  {

    /* onClick时跳出TimePickerDialog */

    new TimePickerDialog(EX04_15_1.this,

        new TimePickerDialog.OnTimeSetListener()

        {   

          public void onTimeSet(TimePicker view,int hourOfDay,

                                int minute)

          {

            /* 这里放更新时间的方法 */

          }         

        },mHour,mMinute,true).show();

  }

});

DatePickerTimePickerDatePickerDialogTimePickerDialog,都可以实现动态更改日期时间的功能,读者可根据自己应用程序的需要来选择用哪种方式实现。

你可能感兴趣的:(android,网络,String,calendar,dialog,button)