android时间控件

2023-05-16

原文地址:http://www.360doc.com/content/14/0617/16/18203124_387517665.shtml


前言

  这一篇博客分别讲解Android平台下,关于日期和时间的几个相关控件。包括DatePicker(日期选择控件)、TimePicker(时间选择控件)、DatePickerDialog(日期选择对话框)、TimePickerDialog(时间选择对话框)、AnalogClock(模拟时钟控件)、DigitalClock(数字时钟控件)。对于时间控件,无非就是一个展示、修改、获取等操作,下面一一讲解。

 

DatePicker、TimePicker

  DatePicker、TimePicker都继承自android.widget.FrameLayout,并且默认展示风格、与操作风格也类似。DatePicker用于展示一个日期选择控件,TimePicker用于展示一个时间选择控件。

  作为一个日期选择控件,DatePicker可以通过设置属性来确定日期选择范围,也可以通过定义好的方法获取到当前选中的时间,并且在修改日期的时候,有响应的事件对其进行响应。

  DatePicker常用相关属性:

  • android:calendarViewShown:是否显示日历。
  • android:startYear:设置可选开始年份。
  • android:endYear:设置可选结束年份。
  • android:maxDate:设置可选最大日期,以mm/dd/yyyy格式设置。
  • android:minDate:设置可选最小日期,以mm/dd/yyyy格式设置。

  DatePicker的方法而言,除了常用获取属性的setter、getter方法之外,还需要特别注意一个初始化的方法init()方法,用于做DatePicker控件的初始化,并且设置日期被修改后,回调的响应事件。此方法的签名如下:

   init(int year, int monthOfYear, int dayOfMonth, DatePicker.OnDateChangedListener onDateChangedListener)

  从上面的init()方法可以看到,DatePicker被修改时响应的事件是DatePicker.OnDateChangedListener事件,如果要响应此事件,需要实现其中的onDateChanged()方法,其中参数从签名即可了解意思,这里不再累述。

   onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)

 

  作为一个时间选择控件来说,TimePicker需要与时间相关的getter、setter方法之外,还需要有时间被修改够,回调的响应事件。

  TimePicker常用方法有如下几个:

  • is24HourView():判断是否为24小时制。
  • setIs24HourView():设置是否为24小时制显示。
  • getCurrentXxx():获取当前时间。
  • setCurrentXxx():设置当前时间。
  • setOnTimeChangedListener():设置时间被修改的回调方法。

  TimePicker控件被修改的回调方法,通过setOnTimeChangedListener()方法设置,其传递一个TimePicker.OnTimeChangedListener接口,需要实现其中的onTimeChanged()方法。

  

   下面通过一个示例来讲解这两个控件的使用,在示例中分别展示了这两个控件,并在其修改之后,把修改值通过Toast的方式展示到屏幕上。

  布局代码:


 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <DatePicker
 8         android:id="@+id/dpPicker"
 9         android:calendarViewShown="false"
10         android:layout_width="match_parent"
11         android:layout_height="wrap_content" />
12 
13     <TimePicker
14         android:id="@+id/tpPicker"
15         android:layout_width="match_parent"
16         android:layout_height="wrap_content" />
17 
18 
19 </LinearLayout>  

  实现代码: 


 1 package com.bgxt.datatimepickerdemo;
 2 
 3 import java.text.SimpleDateFormat;
 4 import java.util.Calendar;
 5 
 6 import android.app.Activity;
 7 import android.os.Bundle;
 8 import android.widget.DatePicker;
 9 import android.widget.DatePicker.OnDateChangedListener;
10 import android.widget.TextView;
11 import android.widget.TimePicker;
12 import android.widget.Toast;
13 
14 public class DataTimePicker extends Activity {
15     private DatePicker datePicker;
16     private TimePicker timePicker;
17 
18     @Override
19     protected void onCreate(Bundle savedInstanceState) {
20         super.onCreate(savedInstanceState);
21         setContentView(R.layout.activity_datatimepicker);
22 
23         datePicker = (DatePicker) findViewById(R.id.dpPicker);
24         timePicker = (TimePicker) findViewById(R.id.tpPicker);
25 
26         datePicker.init(2013, 8, 20, new OnDateChangedListener() {
27 
28             @Override
29             public void onDateChanged(DatePicker view, int year,
30                     int monthOfYear, int dayOfMonth) {
31                 // 获取一个日历对象,并初始化为当前选中的时间
32                 Calendar calendar = Calendar.getInstance();
33                 calendar.set(year, monthOfYear, dayOfMonth);
34                 SimpleDateFormat format = new SimpleDateFormat(
35                         "yyyy年MM月dd日  HH:mm");
36                 Toast.makeText(DataTimePicker.this,
37                         format.format(calendar.getTime()), Toast.LENGTH_SHORT)
38                         .show();
39             }
40         });
41 
42         timePicker.setIs24HourView(true);
43         timePicker
44                 .setOnTimeChangedListener(new TimePicker.OnTimeChangedListener() {
45                     @Override
46                     public void onTimeChanged(TimePicker view, int hourOfDay,
47                             int minute) {
48                         Toast.makeText(DataTimePicker.this,
49                                 hourOfDay + "小时" + minute + "分钟",
50                                 Toast.LENGTH_SHORT).show();
51                     }
52                 });
53 
54     }
55 }  

  效果展示:

 

DatePickerDialog、TimePickerDialog

  DatePickerDialog、TimePickerDialog是两个对话框控件,一个弹出对话框用于选择日期,一个弹出对话框用于选择时间,都继承自android.app.AlertDialog。

  这两个控件的开发过程,其主要就是开发其选择后日期或时间后,相应的事件。

  对于DatePickeDialog而言,通过构造函数可以设置弹出的日期控件的初始值,并且可以指定选中日期后,回调事件的实现,构造函数的签名如下:

    DatePickerDialog(Context context, DatePickerDialog.OnDateSetListener callBack, int year, int monthOfYear, int dayOfMonth)

  其中DatePickerDialog.OnDateSetListener为日期选中的响应事件,其他为日期弹出窗口初始化的日期,对于一个OnDateSetListener接口而言,需要实现其中的onDateSet()方法,在这个方法内,可以得到用户选中的日期。

  对于TimePickerDialog而言,同样可以通过构造函数设置初始值,并且设定选中日期后,回调事件的实现,构造函数的签名如下:

    TimePickerDialog(Context context, TimePickerDialog.OnTimeSetListener callBack, int hourOfDay, int minute, boolean is24HourView)

  其中TimePickerDialog.OnTimeSetListener为时间选中的响应事件,其他为时间弹出窗口初始化的时间,对于一个OnTimeSetListener接口而言,需要实现其中的onTimeSet()方法,在这个方法内,可以得到用户选中的时间。

 

AnalogClock、DigitalClock

   AnalogClock、DigitalClock为两个时间展示控件,切只是展示的风格不同而已,没有什么太大的区别。有一点值得注意的就是,这两个控件展示的时间是无法修改的,仅为系统当前时间。看示例就能明白,没什么好详细说的。

  下面通过一个例子说明一下DatePickerDialog、TimePickerDialog、AnalogClock、DigitalClock四个控件的使用。

  布局代码:


 1 <?xml version="1.0" encoding="utf-8"?>
 2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 3     android:layout_width="match_parent"
 4     android:layout_height="match_parent"
 5     android:orientation="vertical" >
 6 
 7     <TextView
 8         android:layout_width="fill_parent"
 9         android:layout_height="wrap_content"
10         android:text="指针时钟:" />
11 
12     <AnalogClock
13         android:layout_width="fill_parent"
14         android:layout_height="wrap_content" />
15 
16     <TextView
17         android:layout_width="fill_parent"
18         android:layout_height="wrap_content"
19         android:text="数字时钟:" />
20 
21     <DigitalClock
22         android:layout_width="fill_parent"
23         android:layout_height="wrap_content"
24         android:textSize="20dp" />
25     <Button
26         android:id="@+id/btnTimePickerDialog"
27         android:layout_width="fill_parent"
28         android:layout_height="wrap_content"
29         android:text="Show TimePickerDialog"
30          />
31     <Button
32         android:id="@+id/btnDatePickerDialog"
33         android:layout_width="fill_parent"
34         android:layout_height="wrap_content"
35         android:text="Show DatePickerDialog"
36          />
37 </LinearLayout>  

  

  实现代码:


 1 package com.bgxt.datatimepickerdemo;
 2 
 3 import android.app.Activity;
 4 import android.app.DatePickerDialog;
 5 import android.app.DatePickerDialog.OnDateSetListener;
 6 import android.app.TimePickerDialog;
 7 import android.app.TimePickerDialog.OnTimeSetListener;
 8 import android.os.Bundle;
 9 import android.view.View;
10 import android.view.View.OnClickListener;
11 import android.widget.Button;
12 import android.widget.DatePicker;
13 import android.widget.TimePicker;
14 import android.widget.Toast;
15 
16 public class AnalogDigitalClock extends Activity implements OnClickListener {
17     private Button btnDate, btnTime;
18 
19     @Override
20     protected void onCreate(Bundle savedInstanceState) {
21         super.onCreate(savedInstanceState);
22         setContentView(R.layout.activity_anologdigital);
23         btnDate = (Button) findViewById(R.id.btnDatePickerDialog);
24         btnTime = (Button) findViewById(R.id.btnTimePickerDialog);
25         btnDate.setOnClickListener(this);
26         btnTime.setOnClickListener(this);
27     }
28 
29     @Override
30     public void onClick(View v) {
31         switch (v.getId()) {
32         case R.id.btnDatePickerDialog:
33             DatePickerDialog datePicker=new DatePickerDialog(AnalogDigitalClock.this, new OnDateSetListener() {
34                 
35                 @Override
36                 public void onDateSet(DatePicker view, int year, int monthOfYear,
37                         int dayOfMonth) {
38                     // TODO Auto-generated method stub
39                     Toast.makeText(AnalogDigitalClock.this, year+"year "+(monthOfYear+1)+"month "+dayOfMonth+"day", Toast.LENGTH_SHORT).show();
40                 }
41             }, 2013, 7, 20);
42             datePicker.show();
43             break;
44 
45         case R.id.btnTimePickerDialog:
46             TimePickerDialog time=new TimePickerDialog(AnalogDigitalClock.this, new OnTimeSetListener() {
47                 
48                 @Override
49                 public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
50                     // TODO Auto-generated method stub
51                     Toast.makeText(AnalogDigitalClock.this, hourOfDay+"hour "+minute+"minute", Toast.LENGTH_SHORT).show();
52                 }
53             }, 18, 25, true);
54             time.show();
55             break;
56         }
57 
58     }
59 }  

  效果展示:

  源码下载

总结

   以上就讲解了在Android平台下,几个与时间相关的控件,没有什么特别的,注意设置与响应事件即可。

http://www.cnblogs.com/plokmju/p/android_DatePiceker.html



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android时间控件 的相关文章

  • BitmapFactory 解码 BMP 图像

    我在用这段代码 http android developers blogspot com 2010 07 multithreading for performance html从 Android 开发者博客下载 BMP 文件 例如this
  • 通过硬件按钮启动 Android 应用程序

    我希望构建一个在单击特定硬件按钮时启动的 Android 应用程序 例如 当我按下音量增大按钮 30 秒时 应用程序必须在不增加音量的情况下启动 我想知道这可能吗 你可以定义一个BroadcastReceiver处理ACTION MEDIA
  • 在 Android 中通过蓝牙接收音频

    我想创建一个能够接收音频流的 Android 应用程序 我想过使用 A2DP 配置文件 但似乎 Android 不支持 A2DP 接收器 看起来有很多人正在寻找这个问题的解决方案 但是接收普通的比特流 然后在应用程序中将数据转换为音频呢 我
  • 相机预览的有效模糊

    到目前为止我尝试过的 将每一帧转换为位图 然后用library https github com wasabeef Blurry并将其放入ImageView这是在相机预览前 显然太慢了 就像1 fps 然后我开始使用渲染脚本这会模糊每一帧
  • 删除所有(子)片段的正确方法

    我在父级片段线性布局 fragmentContainer 中动态加载一堆子级片段 然后当用户单击按钮时 我需要将它们全部删除并添加新的 我不知道每次会添加多少碎片 这是我一次性删除所有碎片的方法 LinearLayout ll Linear
  • Android - 在通知栏中使用外部个人资料图像,如 Facebook

    我知道您可以在推送通知参数中发送信息 例如消息 标题 图像 URL 等 Facebook 如何在通知区域中显示您的个人资料图片和消息 我想在通知区域中使用外部图像 因此当您将其下拉时 您会看到带有消息的个人资料图像 现在 我的仅显示可绘制文
  • 使用 Kotlin 协程替换 LocalBroadcastManager 以进行 Firebase 消息传递

    使用时Firebase 云消息传递 https firebase google com docs cloud messaging android client在 Android 上 通常需要通知当前Activity传入的推送通知 推荐的方法
  • 重置首选项的默认值

    我正在使用 CheckBoxPreference 作为设置屏幕 XML 是
  • 如何使用android ndk r9b为Android编译FFMPEG

    我想设计一个Android应用程序 可以通过FFMPEG命令播放和编辑视频 但我不知道如何在Android上使用FFMPEG 我尝试过从Google搜索到的许多方法 但它们太旧了 无法实现 现在 FFMPEG的最新版本是2 1 1 Andr
  • 没有 Listview 的 Android 导航抽屉

    我想创建一个像导航抽屉一样的滑动菜单 但是将会有文本视图和图像视图 就像半活动一样 有可能做到这一点吗 您可以使用NavigationDrawer来自支持库 包括一个FrameLayout作为一个孩子DrawerLayout并使androi
  • 迭代 Sqlite-query 中的行

    我有一个表布局 我想用数据库查询的结果填充它 我使用全选 查询返回四行数据 我使用此代码来填充表行内的 TextView Cursor c null c dh getAlternative2 startManagingCursor c th
  • setOnTouchListener() 给我一个错误

    button setOnTouchListener new OnTouchListener public void onClick View v Toast makeText MainActivity this YOUR TEXT 5000
  • BaseAdapter:将 hasStableIds() 设置为 false?

    我有一个ListView使用的子类BaseAdapter 适配器使用项目索引 位置 作为 id 因此 id 不稳定 底层数据的操作之一是在两个数据项之间交换 我需要在我的适配器中覆盖吗hasStableIds to return false
  • 改变换行行为

    我可以在 TextView 中使用 Spannable 创建具有不同外观 下划线 删除线等的跨度 我怎样才能做同样的事情来改变换行行为 特别是 我不希望电子邮件地址在中间换行 我希望它像一个单词一样 I tried 包裹在一起跨度 http
  • IllegalStateException:无法更改片段的标签,以前是 android:switcher,现在是 android:switcher

    我的活动使用TabLayout ViewPager 这里的选项卡和页面的数量是动态的 具体取决于从服务器获取的数据 崩溃是通过 Crashlytics 报告的 我无法复制它 我的活动代码 Override protected void on
  • 超慢的表格布局性能

    我遇到了糟糕的 TableLayout 性能 我在这里读过一些帖子 谈论同样的事情 Android 动态创建表 性能不佳 https stackoverflow com questions 9813427 android dynamical
  • 在 WebView 中打开 PDF 文件

    大约 2 天 我尝试在我的自定义中打开 PDF 文件WebvView 这是我的WebView code import android app AlertDialog import android app ProgressDialog imp
  • 以编程方式安装 Android apk 作为测试框架的一部分

    我正在尝试以编程方式安装 apk 但运气不佳 我正在设置一个针对物理设备的自动化测试框架 并且我希望测试设备在运行测试之前从构建服务器检索最新的 apk 虽然我知道没有通用的方法可以在未经用户同意的情况下实际安装 apk 但我很好奇在开发人
  • 如何使用Android Invalidate()

    在我的主要活动中 我定义了两个视图和一个菜单 浏览次数 1 自定义视图游戏 2 按钮btn 菜单 1 打开项目用于打开文件 菜单布局在不同的活动中定义 基本上 当主活动启动时 它会绘制没有任何内容的自定义视图和按钮 然后我使用菜单中的 打开
  • 无法查询 ContentResolver 以从 my_downloads 获取下载文件的名称,但在 all_downloads 中工作正常

    我的应用程序设置为激活一次具有扩展名的文件 myappdata被打开 它通过这个意图过滤器来实现这一点

随机推荐