您的位置:首页 > 移动开发 > Android开发

Android学习笔记(二一):有趣的widget-日期和时间

2011-04-02 17:37 435 查看
Android提供了日期和时间的widget。



日期widget

DatePicker和DatePickerDialog,DatePickerDialog是装载DatePicker的一个简单的容器,如图所示。分别有一个触发方法OnDateChangedListener( ) 和OnDateSetListener( )。

在这个例子中,我们设置了两个button和一个textView,当按键弹出DatePickDialog。

步骤1:一些有关时间的java函数

获得当前时间的实例:Calendar calendar = Calendar.getInstance();
获得当前时间:calendar.get(Calendar.YEAR),通过设置参数可获得年,月,日,时,分,秒
设置时间:calendar.set(Calendar.YEAR,2011),可设置年,月,日,时,分,秒
用String给出当前的时间信息,可以使用Java的SimpleDateFormat,如下处理:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm");
//可以设置不同的类型

通过sdf.format(calendar.getTime()就可以获得相关的info string,可供出来

步骤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文件:

<RelativeLayout android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent">

<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" />

</RelativeLayout>



计时器Chronometer

Android提供一个计时器Chronometer,这个widget的类似DiagitalClock,在XML中通过使用<Chronometer ... />来定义。下面是来自Android reference的一个例子。最上面的就是Chronometer widget。

有下面几个关键的控制函数:

start():开始实时更新计时器
stop():停止实时更新计时器,注意,实际上计时器还在走
setbase():设置初始的基准时间,如果设置当前时间,setBase(SystemClock.elapsedRealtime()),即重置计时器,计时器归零
format():设置显示格式,缺省为MM:SS或者H:MM:SS,如果我们希望显示的内容是"我的计时器 00:00",可以使用format("我的计时器 %s"),第一个%s,表示缺省的时间格式。如果清空格式,采用缺省的,看通过format(null)来实现。

等级羽毛球
周六时单位网络公布了今年羽毛球比赛的赛时,和往常并一样,这次取消了女单,增加了双打,不是男双,不是女双,不是混双,是权双。必须是三级部门领导以上,必须其中一人是二级部门领导,性别不限。也就是现在打球人是分三六九等,至于“地位”相当的人,只有资格站在同一球场上。好像印度的种姓也在搞类似的东西。人群中存在分工不同,有些人能力强些,责任大写,得到的报酬也不同,但是人群中没有等级,生不带来死不带去的。在球场上,总是场外的事情太多,就像足球。
相关链接:我的Andriod开发相关文章
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: