13.5 时间与日期控件

在很多Android应用中都需要设置日期和时间。当然,最简单的设置日期和时间的方法是提供一个EditText控件,但这种方式显得不太友好。Android SDK提供了两个控件:DatePicker和TimePicker,分别以可视化的方式输入日期和时间。除此之外,Android SDK还提供了显示时间的两个控件:DigitalClock和AnalogClock,分别以数字方式和表盘方式显示时间。

13.5.1 DatePicker(输入日期的控件)

DatePicker控件可用于输入日期。日期的输入范围是1900-1-1~2100-12-31。DatePicker控件的基本使用方法如下:

<DatePicker android:id="@+id/datepicker"

  android:layout_width="fill_parent" android:layout_height="wrap_content" />

通过DatePicker类的getYear、getMonth和getDayOfMonth方法可以分别获得DatePicker控件当前显示的年、月、日。通过DatePicker类的init方法对DatePicker控件进行初始化。init方法的定义如下:

public void init(int year, int monthOfYear, int dayOfMonth, OnDateChangedListener onDateChangedListener)

其中year、monthOfYear和dayOfMonth参数分别用来设置DatePicker控件的年、月、日。onDateChangedListener参数用来设置DatePicker控件的日期变化监听对象。该对象对应的类必须实现android.widget.DatePicker.OnDateChangedListener接口。DatePicker控件的显示效果如图13-22所示。

 

▲图13-22 DatePicker 的显示效果

13.5.2 TimePicker(输入时间的控件)

TimePicker控件用来输入时间(只能输入小时和分钟)。该控件的基本用法如下:

<TimePicker android:id="@+id/timepicker"

  android:layout_width="fill_parent" android:layout_height="wrap_content" />

TimePicker在默认情况下是12小时进制,如图13-23所示。如果想以24小时进制显示时间,可以使用TimePicker.setIs24HourView方法设置,以24小时进制显示时间的TimePicker控件如图13-24所示。

 

▲图13-23 12 小时进制

 

▲图13-24 24 小时进制

当TimePicker的时间变化时,会触发OnTimeChanged事件,但与DatePicker控件不同的是,TimePicker通过setOnTimeChangedListener方法设置监听时间变化的监听对象,而DatePicker通过init方法设置监听日期变化的监听对象。

13.5.3 DatePicker、TimePicker与TextView同步显示日期和时间

源代码目录:src/ch13/Datetimepicker

在本例中使用了DatePicker、TimePicker和TextView控件。当DatePicker和TimePicker中的日期、时间变化时,TextView会显示变化后的日期和时间。

源代码文件:src/ch13/Datetimepicker/src/mobile/android/datetimepicker/Main.java

public class Main extends Activity implements OnDateChangedListener, OnTimeChanged Listener

{

  private TextView textView;

  private DatePicker datePicker;

  private TimePicker timePicker;

  @Override

  public void onTimeChanged(TimePicker view, int hourOfDay, int minute)

  {

     // 调用onDateChanged方法在TextView中显示当前的日期和时间

    onDateChanged(null, 0, 0, 0);

  }

  @Override

  public void onDateChanged(DatePicker view, int year, int monthOfYear,

      int dayOfMonth)

  {

    Calendar calendar = Calendar.getInstance();

    calendar.set(datePicker.getYear(), datePicker.getMonth(), datePicker

        .getDayOfMonth(), timePicker.getCurrentHour(), timePicker.getCurrentMinute());

    SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日  HH:mm");

    // 在TextView中显示当前的日期和时间

    textView.setText(sdf.format(calendar.getTime()));

  }

  @Override

  public void onCreate(Bundle savedInstanceState)

  {

    super.onCreate(savedInstanceState);

    setContentView(R.layout.main);

    datePicker = (DatePicker) findViewById(R.id.datepicker);

    timePicker = (TimePicker) findViewById(R.id.timepicker);

    datePicker.init(2001, 1, 25, this);

    timePicker.setIs24HourView(true);

    timePicker.setOnTimeChangedListener(this);

    textView = (TextView) findViewById(R.id.textview);

    // 在TextView上显示DatePicker及TimePicker上的日期和时间

    onDateChanged(null, 0, 0, 0);

  }

}

运行本例后,将显示如图13-25所示的效果。

 

▲图13-25 与TextView 同步日期和时间

13.5.4 AnalogClock和DigitalClock(显示时钟的控件)

源代码目录:src/ch13/Clock

AnalogClock控件用于以表盘方式显示当前时间,该控件只有两个指针(时针和分针)。使用方法如下:

<AnalogClock android:layout_width="fill_parent" android :layout_height="wrap_content" />

DigitalClock控件用于以数字方式显示当前时间,该控件可以显示时、分、秒。使用方法如下:

<DigitalClock android:layout_width="wrap_content"

  android:layout_height="wrap_content" android:textSize="18dp" />

本例的显示效果如图13-26所示。

 

▲图13-26 显示时间的控件