您的位置:首页 > 其它

文章标题

2017-09-03 14:29 1531 查看


Android中日期和时间选择器的实现

  创建日期或时间选择窗口需要弹出Dialog的时候,Activity类的showDialog方法已经弃用了,而推荐使用的是DialogFragment,本文总结一下其具体用法.

  (一)日期选择器

  1、创建MyDatePickerDialog类,继承自DatePickerDialog类,实现构造方法,重写onDateChanged方法:



1 import android.app.DatePickerDialog;
2 import android.content.Context;
3 import android.widget.DatePicker;
4
5 public class MyDatePickerDialog extends DatePickerDialog {
6
7     public MyDatePickerDialog (Context context, OnDateSetListener callBack,
8             int year, int monthOfYear, int dayOfMonth) {
9         super(context, callBack, year, monthOfYear, dayOfMonth);
10
11         this.setTitle("选择任务的日期");
12         this.setButton2("取消", (OnClickListener)null);
13         this.setButton("确定", this);  //setButton和this参数组合表示这个按钮是确定按钮
14
15     }
16
17     @Override
18     public void onDateChanged(DatePicker view, int year, int month, int day) {
19         super.onDateChanged(view, year, month, day);
20         this.setTitle("选择任务的日期");
21     }
22
23 }




  注:隐藏日期选择器的“日”选择项的方法:在MyDatePickerDialog的构造方法中添加一个参数:代表日期选择器类型的整型参数,比如0代表年月日都显示,1表示只显示年和月等,然后用如下代码来隐藏“日”选择项(隐藏年月的方法同理,时间选择器也同理):



1      // 获取当前系统的语言
2
4000
Locale locale = context.getResources().getConfiguration().locale;
3         String language = locale.getLanguage();
4         // 隐藏日选择栏
5             if (language.endsWith("zh")) {
6                 ((ViewGroup) ((ViewGroup) this.getDatePicker().getChildAt(0))
7                         .getChildAt(0)).getChildAt(2).setVisibility(View.GONE);
8             } else {
9                 ((ViewGroup) ((ViewGroup) this.getDatePicker().getChildAt(0))
10                         .getChildAt(0)).getChildAt(1).setVisibility(View.GONE);
11             }




  2、创建DatePickerFragment类,继承自DialogFragment类并实现DatePickerDialog.OnDateSetListener接口,重写其onCreateDialog和onDateSet方法:



1 import java.util.Calendar;
2
3 import android.app.Dialog;
4 import android.app.DialogFragment;
5 import android.os.Bundle;
6 import android.widget.DatePicker;
7 import android.app.DatePickerDialog;
8
9 public class DatePickerFragment extends DialogFragment implements
10         DatePickerDialog.OnDateSetListener {
11     @Override
12     public Dialog onCreateDialog(Bundle savedInstanceState) {
13         final Calendar c = Calendar.getInstance();
14         int year = c.get(Calendar.YEAR);
15         int month = c.get(Calendar.MONTH);
16         int day = c.get(Calendar.DAY_OF_MONTH);
17         return new MyDatePickerDialog(getActivity(), this, year, month, day);
18     }
19
20     @Override
21     public void onDateSet(DatePicker view, int year, int month, int day) {
22
23     }
24
25 }




  3、在活动中显示日期选择器



1         DatePickerFragment datePickerFrg = new DatePickerFragment() {
2                 @Override
3                 public void onDateSet(DatePicker view, int year, int month,
4                         int day) {
5                     Log.d("DateSet","选择的日期是:" + year +"-" + (month + 1) + "-" + day);                }
6             };
7             datePickerFrg.show(getFragmentManager(), "datePickerFrg");




  效果:



  (二)时间选择器

  时间选择器的使用其实和日期选择器差不多.

  1、创建MyTimePickerDialog类,继承自TimePickerDialog,实现构造方法,重写onTimeChanged方法:



1 import android.app.TimePickerDialog;
2 import android.content.Context;
3 import android.content.DialogInterface.OnClickListener;
4 import android.widget.TimePicker;
5
6 public class MyTimePickerDialog extends TimePickerDialog {
7
8     public MyTimePickerDialog (Context context, OnTimeSetListener callBack,
9             int hourOfDay, int minute, boolean is24HourView) {
10         super(context, callBack, hourOfDay, minute, is24HourView);
11
12         this.setTitle("选择任务的时间");
13         this.setButton2("取消", (OnClickListener)null);
14         this.setButton("确定", this);  //setButton和this参数组合表示这个按钮是确定按钮
15     }
16
17     @Override
18     public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
19         super.onTimeChanged(view, hourOfDay, minute);
20         this.setTitle("选择任务的时间");
21     }
22
23 }




  2、创建TimePickerFragment类,继承自DialogFragment类并实现TimePickerDialog.OnTimeSetListener接口,重写其onCreateDialog和onTimeSet方法:



1 public class TimePickerFragment extends DialogFragment implements
2         TimePickerDialog.OnTimeSetListener {
3
4     @Override
5     public Dialog onCreateDialog(Bundle savedInstanceState) {
6         final Calendar calendar = Calendar.getInstance();
7         int hour = calendar.get(Calendar.HOUR_OF_DAY);
8         int minute = calendar.get(Calendar.MINUTE);
9
10         return new MyTimePickerDialog(getActivity(), this, hour, minute,
11                 DateFormat.is24HourFormat(getActivity()));
12     }
13
14     @Override
15     public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
16
17     }
18 }




  3、在活动中显示时间选择器:



1         TimePickerFragment timePickerFrg = new TimePickerFragment() {
2                 @Override
3                 public void onTimeSet(android.widget.TimePicker view,
4                         int hourOfDay, int minute) {
5                     Log.d("TimeSet", "选择的时间是:" + hourOfDay + ":" + minute);
6                 };
7             };
8             timePickerFrg.show(getFragmentManager(), "timePickerFrg");




  效果:



分类: Android基础

好文要顶
关注我
收藏该文









AzureSky

关注 - 0

粉丝 - 13

+加关注

0

0

« 上一篇:Android AlertDialog的各种用法总结
» 下一篇:Android自定义控件在不同状态下的属性

</div>
<div class="postDesc">posted @ <span id="post-date">2016-04-10 10:29</span> <a href="http://www.cnblogs.com/jiayongji/">AzureSky</a> 阅读(<span id="post_view_count">1035</span>) 评论(<span id="post_comment_count">0</span>)  <a href="https://i.cnblogs.com/EditPosts.aspx?postid=5373509" rel="nofollow">编辑</a> <a href="#" onclick="AddToWz(5373509);return false;">收藏</a></div>
</div>
<script type="text/javascript">var allowComments=true,cb_blogId=228770,cb_entryId=5373509,cb_blogApp=currentBlogApp,cb_blogUserGuid='87070617-3e00-e511-b908-9dcfd8948a71',cb_entryCreatedDate='2016/4/10 10:29:00';loadViewCount(cb_entryId);</script>


刷新评论刷新页面返回顶部

发表评论

昵称:

评论内容:













不改了
退出
订阅评论

[Ctrl+Enter快捷键提交]

【推荐】50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
【推荐】可嵌入您系统的“在线Excel”!SpreadJS 纯前端表格控件




最新IT新闻:
· 三星电子CEO尹富根:李在镕受审导致重要决策暂停 我感到惊恐<
cdeb
/a>
· 一张图看懂华为麒麟970:国产最强芯
· 8600万澳元的大项目,网友用57行代码就搞定
· 特斯拉把耐克的设计牛人挖走了 曾研发自动系鞋带系统
· Google母公司用一家“数字”公司正式完成重组
» 更多新闻…



最新知识库文章:
· 做到这一点,你也可以成为优秀的程序员
· 写给立志做码农的大学生
· 架构腐化之谜
· 学会思考,而不只是编程
· 编写Shell脚本的最佳实践
» 更多知识库文章…

fixPostBody();
setTimeout(function () { incrementViewCount(cb_entryId); }, 50);
deliverAdT2();
deliverAdC1();
deliverAdC2();
loadNewsAndKb();
loadBlogSignature();
LoadPostInfoBlock(cb_blogId, cb_entryId, cb_blogApp, cb_blogUserGuid);
GetPrevNextPost(cb_entryId, cb_blogId, cb_entryCreatedDate);
loadOptUnderPost();
GetHistoryToday(cb_blogId, cb_blogApp, cb_entryCreatedDate);

</div><!--end: forFlow -->
</div><!--end: mainContent 主体内容容器-->

<div id="sideBar">
<div id="sideBarMain">


公告

昵称:AzureSky
园龄:2年3个月
粉丝:13
关注:0+加关注

<div id="blog-calendar" style=""><table id="blogCalendar" class="Cal" cellspacing="0" cellpadding="0" title="Calendar">
<tbody><tr><td colspan="7"><table class="CalTitle" cellspacing="0">
<tbody><tr><td class="CalNextPrev"><a href="javascript:void(0);" onclick="loadBlogCalendar('2017/08/01');return false;"><</a></td><td align="center">2017年9月</td><td class="CalNextPrev" align="right"><a href="javascript:void(0);" onclick="loadBlogCalendar('2017/10/01');return false;">></a></td></tr>
</tbody></table></td></tr><tr><th class="CalDayHeader" align="center" abbr="日" scope="col">日</th><th class="CalDayHeader" align="center" abbr="一" scope="col">一</th><th class="CalDayHeader" align="center" abbr="二" scope="col">二</th><th class="CalDayHeader" align="center" abbr="三" scope="col">三</th><th class="CalDayHeader" align="center" abbr="四" scope="col">四</th><th class="CalDayHeader" align="center" abbr="五" scope="col">五</th><th class="CalDayHeader" align="center" abbr="六" scope="col">六</th></tr><tr><td class="CalOtherMonthDay" align="center">27</td><td class="CalOtherMonthDay" align="center">28</td><td class="CalOtherMonthDay" align="center">29</td><td class="CalOtherMonthDay" align="center">30</td><td class="CalOtherMonthDay" align="center">31</td><td align="center">1</td><td class="CalWeekendDay" align="center">2</td></tr><tr><td class="CalTodayDay" align="center"><a href="http://www.cnblogs.com/jiayongji/archive/2017/09/03.html"><u>3</u></a></td><td align="center">4</td><td align="center">5</td><td align="center">6</td><td align="center">7</td><td align="center">8</td><td class="CalWeekendDay" align="center">9</td></tr><tr><td class="CalWeekendDay" align="center">10</td><td align="center">11</td><td align="center">12</td><td align="center">13</td><td align="center">14</td><td align="center">15</td><td class="CalWeekendDay" align="center">16</td></tr><tr><td class="CalWeekendDay" align="center">17</td><td align="center">18</td><td align="center">19</td><td align="center">20</td><td align="center">21</td><td align="center">22</td><td class="CalWeekendDay" align="center">23</td></tr><tr><td class="CalWeekendDay" align="center">24</td><td align="center">25</td><td align="center">26</td><td align="center">27</td><td align="center">28</td><td align="center">29</td><td class="CalWeekendDay" align="center">30</td></tr><tr><td class="CalOtherMonthDay" align="center">1</td><td class="CalOtherMonthDay" align="center">2</td><td class="CalOtherMonthDay" align="center">3</td><td class="CalOtherMonthDay" align="center">4</td><td class="CalOtherMonthDay" align="center">5</td><td class="CalOtherMonthDay" align="center">6</td><td class="CalOtherMonthDay" align="center">7</td></tr>


<div id="leftcontentcontainer">
<div id="blog-sidecolumn"><div id="sidebar_search" class="sidebar-block">


搜索

常用链接

我的随笔
我的评论
我的参与
最新评论
我的标签

我的标签

python(38)
数据分析(7)
正则表达式(7)
GitHub(5)
JS(4)
Json(4)
Git(4)
算法(4)
分词(3)
后端云(3)
更多

随笔分类

《第一行代码:Android》读书笔记(9)

Android高级(4)

Android基础(12)

Git(5)

Java技术(5)

python基础(8)

python库大全(9)

编程工具(6)

工作经历(2)

设计模式(2)

数据分析与挖掘(9)

数据库(1)

思维导图读书笔记(1)

算法与数据结构(4)

网络爬虫(3)

微信小程序开发(3)

正则表达式(7)

随笔档案

2017年9月 (1)

2017年8月 (16)

2017年7月 (30)

2017年2月 (6)

2016年8月 (1)

2016年6月 (2)

2016年5月 (3)

2016年4月 (10)

2016年3月 (13)

2015年9月 (1)

2015年8月 (2)

2015年5月 (2)

最新评论

1. Re:ListView的优化机制和滑动时数据错乱的讨论

治标不治本

–奥茨玛

2. Re:Android自定义View的三种实现方式

写的很好呀!总结能力棒棒哒。

–我是小王

3. Re:科大讯飞开放平台——语音听写接口的使用

挺好的,学习了

–haohakawa

4. Re:Java-json系列(一):用GSON解析Json格式数据

mark

–leavind

5. Re:Android自定义View的三种实现方式



–光盼

阅读排行榜

1. Java-json系列(一):用GSON解析Json格式数据(55563)
2. Android自定义View的三种实现方式(31024)
3. Linux vi/vim编辑器常用命令与用法总结(10025)
4. Java-json系列(二):用JSONObject解析和处理json数据(7792)
5. 科大讯飞开放平台——语音听写接口的使用(7269)

评论排行榜

1. 科大讯飞开放平台——语音听写接口的使用(7)
2. Android自定义View的三种实现方式(3)
3. Java-json系列(一):用GSON解析Json格式数据(1)
4. ListView的优化机制和滑动时数据错乱的讨论(1)

推荐排行榜

1. Android自定义View的三种实现方式(3)
2. Java-json系列(一):用GSON解析Json格式数据(3)
3. Android AlarmManager的用法详解(1)
4. Linux vi/vim编辑器常用命令与用法总结(1)

</div><!--end: sideBarMain -->
</div><!--end: sideBar 侧边栏容器 -->
<div class="clear"></div>
</div>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: