2011年(125)
分类: LINUX
2011-04-18 11:03:35
Android提供了日期和时间的widget。
日期widget
DatePicker和DatePickerDialog,DatePickerDialog是装载DatePicker的一个简单的容器,如图所示。分别有一个触发方法OnDateChangedListener( ) 和OnDateSetListener( )。
在这个例子中,我们设置了两个button和一个textView,当按键弹出DatePickDialog。
步骤1:一些有关时间的java函数
步骤2:设置Android XML文件并编写有关的代码(略去)
步骤3:弹出日期Dialog,并设置Set的触发回调函数
new DatePickerDialog(
/*参数1:context,在我的例子是内部类中调用,所有需指明this是那个this*/ Chapter9Test1.this,
/*参数2:设置Set日期的回调函数*/ dateSet,
/*参数3,4,5:设置的年月日*/ calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DATE)).show() ;
最后一个show()表示将dialog显示出来。Set的回调函数,是OnDateSetListener(),如下:
DatePickerDialog.OnDateSetListener dateSet = new DatePickerDialog.OnDateSetListener() {
public void onDateSet (DatePicker view, int year, int monthOfYear, int dayOfMonth) {
calendar.set(Calendar.YEAR, year);
calendar.set(Calendar.MONTH, monthOfYear);
calendar.set(Calendar.DATE, dayOfMonth);
}
};
时间widget
日期的非常相似,TimePickerDialog(可以通过OnTimeSetListener设置回调函数)是装载TimePicker(可通过OnTimeChangedListener设置回调函数)的简单Dialog的容器。
弹出Dialog,可以照着画瓢,采用如下方式。同样的第一个参数是context,第二个参数是回调函数,第三和第四是时和分,第5个参数表示是否24小时制的显示方式。
new TimePickerDialog(Chapter9Test1.this, timeSet, calendar.get(Calendar.HOUR_OF_DAY), calendar.get(Calendar.MINUTE), true).show() ;
对于回调函数timeSet,可通过如下设置:
TimePickerDialog.OnTimeSetListener timeSet = new TimePickerDialog.OnTimeSetListener() {
@Override
public void onTimeSet (TimePicker view, int hourOfDay, int minute) {
calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
calendar.set(Calendar.MINUTE,minute);
}
};
在Activity中调起Dialog的其他方式
在上面的例子中,创建了xxxPickerDialog,通过show()方法将它们调起来。在Android的Tutorial的例子在,可以重写Acitivity的onCreateDialog方法来实现,下面以调起日期的Dialog为例子。
public class Chapter9Tutorial1 extends Activity {
... ...
//步骤1:给出我们需要显示的不同Dialog的ID ,以便能判断显示哪个Dialog
static final int DATE_DIALOG_ID = 0;
//步骤2:通过 showDialog(Dialog ID)调起相应的Dialog
protected void someMethod(.... ) {
... ...
showDialog(DATE_DIALOG_ID);
... ...
}
//重写Acitivity的方法 onCreateDialog(int id),该方法告诉showDialog() ,要显示哪个Dialog,给出Dialog的对象
protected Dialog onCreateDialog(int id) {
switch(id){
case DATE_DIALOG_ID:
return new DatePickerDialog( this,mDateSetlisten,mYear,mMonth,mDay);
... ...
}
return super.onCreateDialog(id); //或者直接return null;
}
}
模拟时钟和数字时钟
前面的例子,我们通常要设置某个日期或者时间,如果我们只是想向用户显示当前的时间,可以采用模拟始终和数字时钟。如图所示,下面是相关的Android XML文件:
<AnalogClock android:id="@+id/c91_analog"
android:layout_width="fill_parent" android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentTop="true" />
<DigitalClock android:id="@+id/c91_digital"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_below="@id/c91_analog" />
计时器Chronometer
Android提供一个计时器Chronometer,这个widget的类似DiagitalClock,在XML中通过使用
有下面几个关键的控制函数: