当前位置: 首页 > 图灵资讯 > 技术篇> Android学习笔记(二一):有趣的widget-日期和时间

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

来源:图灵教育
时间:2023-05-19 09:06:54

Android提供了日期和时间的widget。

日期widget

DatePicker和DatePickerDialog,DatePickerDialog是一个装载DatePicker的简单容器,如图所示。有一种触发方法,Ondatechangedlistener( ) Ondatesetlistener( )。

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

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

  • 获取当前时间的例子:Calendar calendar = Calendar.getInstance();
  • 获得当前时间:calendar.get(Calendar.YEAR),年、月、日、时、分、秒可通过设置参数获得
  • 设置时间:calendar.set(Calendar.YEAR,可设置年、月、日、分、秒
  • 使用Java的SimpledateFormat,用String提供当前的时间信息,如下处理: 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*/ chapter9testtt1.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,第二个参数是回调函数,第三个和第四个是时和分,第五个参数表示是否为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()调整它们。Androidtutorial的例子是可以重写Acitivity的oncreatedialog方法。以调动日期的dialog为例。

public class chapter9tutorial extends Activity{     ... ...    //步骤1:给出我们需要显示的不同Dialog的ID,为了判断显示哪个Dialogo    static final int DATE_DIALOG_ID = 0;      //步骤2:通过showdialogo(Dialog ID)调动相应的Dialogo    protected void someMethod(... ) {        ... ...         showDialog(DATE_DIALOG_ID);                        ... ...     }     ///重写Acitivityoncreatedialogo(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); /或者直接returnnn null;     }       }

模拟时钟和数字时钟

在前面的例子中,我们通常需要设置一个日期或时间。如果我们只是想向用户显示当前的时间,我们可以使用模拟始终和数字时钟。如图所示,以下是相关的安卓 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提供一个类似于DiagitalClock的计时器Chronometer,用于XML<Chronometer ... />定义。以下是Android。 reference的一个例子。上面是Chronometer widget。

有以下关键控制函数:

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