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

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开发相关文章

时间: 2024-10-23 22:51:37

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

Android学习笔记二十九之SwipeRefreshLayout、RecyclerView和CardView

Android学习笔记二十九之SwipeRefreshLayout.RecyclerView和CardView 前面我们介绍了AlertDialog和几个常用的Dialog,ProgressDialog进度条提示框.DatePickerDialog日期选择对话框和TimePickerDialog时间选择对话框.这一节我们介绍几个新的API控件SwipeRefreshLayout.RecyclerView和CardView,这几个API控件都是google在Android5.0推出的.下面我们来学

Android学习笔记二十之Toast吐司、Notification通知、PopupWindow弹出窗

Android学习笔记二十之Toast吐司.Notification通知.PopupWindow弹出窗 Toast吐司 Toast吐司是我们经常用到的一个控件,Toast是AndroidOS用来显示消息的一种机制,它与Dialog不同,Toast不会获取到焦点,通常显示一段时间之后就会自动消失,下面我们来介绍Toast的几种常用方式: 第一种,默认显示方式,也是最常用的方式: Toast.makeText(MainActivity.this, "这是默认的显示方式", Toast.LE

Android学习笔记二十五之ListView多布局实现

Android学习笔记二十五之ListView多布局实现 这一节是介绍ListView这个控件的最后一节,实现一个Item的多布局.像我们经常在用的各种即时通讯工具,QQ.微信等,假设他们的会话界面是ListView实现的,那么ListView就有多种Item布局,这一节,我们就来实现一个ListView的多种Item. 要实现ListView里面有多种Item,就要重写适配器的两个方法getViewTypeCount()和getItemViewType(int position),第一个方法是

Android学习笔记二十四之ListView列表视图二

Android学习笔记二十四之ListView列表视图二 前面一篇我们介绍了常用的几种适配器的简单实现和ListView的简单使用,这一篇中,我们介绍一下ListView的优化和一些其它的问题. ListView优化方法一 在ListView中,我们最常用的就是自定义Adapter,在我们自定义Adapter中,需要实现两个比较重要的方法getCount()和getView(),前者是负责计算ListView的总Item数,后者是生成Item,有多少个Item就会调用getView()方法多少次

Android学习笔记二十七之ExpandableListView可折叠列表和StackView栈视图

Android学习笔记二十七之ExpandableListView可折叠列表和StackView栈视图 ExpandableListView可折叠列表 这一节我们介绍第三个用适配器的控件,ExpandableListView可折叠列表.这个控件可以实现我们在QQ中非常常见好友分组功能,ExpandableListView是ListView的子类,用法跟ListView差不多,下面我们来学习这个控件的基本使用: 常用属性: android:childDivider:指定各组内子类表项之间的分隔条,

Android学习笔记二

17. 在ContentProvider中定义的getType()方法是定义URI的内容类型. 18. SQLiteDatabase类中的insert/delete/update/query方法其实也挺好用的,我在EquipmentProvider类中做了实现 19. Android专门有个单元测试项目(Android Test Project),在这个项目中,可以新建一个继承AndroidTestCase类的具体测试类来单元测试某个功能.我新建了一个AndroidTestProject项目,在

Android学习笔记二-Linear Layout

1.LinearLayout是子view均为单方向的,即均为水平或垂直方向的布局.你可以用android:orientation属性来 定义layout方向 所有子view都是一个挨着一个的,所以一个垂直列表,不管它本身多宽,同时只能有一行.若是水平列表,则都等高. 2.LayoutWeight 用来操控各个子view的相对比例,,即各个子元素对空间的使用权重 Weight并非网上很多文章所叙述的那样(文章都过于片面),weight是指某个组件在布局中[剩余空间]中的显示权重,那么所谓的剩余空间

Android学习笔记二十.使用ContentProvider实现数据共享(二).URI...工具类

一.UriMatcher与ContentUris工具类 UriMatcher 1.功能概述 开发ContentProvider时所实现的query().insert().delete().update()方法的第一个参数为Uri参数,该参数由ContentResolver调用这些方法时传入.在上一篇博文中的实例,并没有真正对数据进行操作,因此ContentProvider并未对Uri参数进行任何判断.所以为了确定该ContentProvider实际能处理的Uri,以确定每个方法中Uri参数所操作

Android学习笔记二十一.使用ContentProvider实现数据共享(四).操作系统(联系人)的ContentProvider

Android系统本身提供了大量的ContentProvider,例如联系人信息.系统的多媒体信息等,我们开发的应用程序主要是通过ContentResolver来调用系统的ContentProvider提供的query().insert().update()和delete()方法来获取Android内部的数据. 一.如何使用ContentResolver操作系统ContentProvider暴露的内部数据? 1.调用Activity的getContentResolver()获取ContentRe

Android学习笔记二十二.使用ContentProvider实现数据共享(五).监听ContentProvider的数据改变

一.使用ContentProvider管理多媒体内容 Android提供了Camera程序来支持拍照.拍摄视频,用户拍摄的相片.视频都将存放在固定的位置.Android同样为这些多媒体内容提供了ContentProvider,所以我们可以通过使用ContentProvider实现其他应用直接访问Camera所拍摄的照片.视频等. 1.多媒体ContentProvider的Uri (1)MediaStore.Audio.Media.EXTERNAL_CONTENT_URI:存储在外部存储器(SD卡