- Android开发权威指南(第二版)
- 李宁编著
- 136字
- 2024-12-21 14:46:41
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 显示时间的控件