文章标题
来源:互联网 发布:精准扶贫大数据平台app 编辑:程序博客网 时间:2024/05/21 16:54
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 @Override18 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 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 implements10 DatePickerDialog.OnDateSetListener {11 @Override12 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 @Override21 public void onDateSet(DatePicker view, int year, int month, int day) {22 23 }24 25 }
3、在活动中显示日期选择器
1 DatePickerFragment datePickerFrg = new DatePickerFragment() {2 @Override3 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 @Override18 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 @Override15 public void onTimeSet(TimePicker view, int hourOfDay, int minute) {16 17 }18 }
3、在活动中显示时间选择器:
1 TimePickerFragment timePickerFrg = new TimePickerFragment() {2 @Override3 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基础
好文要顶 关注我 收藏该文
0
0
« 上一篇:Android AlertDialog的各种用法总结
» 下一篇:Android自定义控件在不同状态下的属性
» 下一篇: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>
</div><!--end: forFlow --></div><!--end: mainContent 主体内容容器--><div id="sideBar"> <div id="sideBarMain">
公告
昵称:AzureSky
园龄:2年3个月
粉丝:13
关注:0
园龄: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">
</div><!--end: sideBarMain --></div><!--end: sideBar 侧边栏容器 --><div class="clear"></div></div>
阅读全文
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- <c语言经典100例>c3 完全平方数
- linux使用ultraedit的FTP的功能出现的不能初始化的问题
- junit 4.12 学习笔记
- Git上传项目至远程仓库与同步到本地
- NYOJ 599 奋斗的小蜗牛
- 文章标题
- 注册事件响应函数
- EventBus使用详解
- 数据类型
- AbstractQueuedSynchronizer源码剖析(五)- 响应中断的共享锁
- 定时检测网站运行状态
- FileReader采用的默认编码
- Handler深入解析(一)
- 抽象类和接口的总结
昵称:
不改了退出 订阅评论
[Ctrl+Enter快捷键提交]
【推荐】可嵌入您系统的“在线Excel”!SpreadJS 纯前端表格控件
· 三星电子CEO尹富根:李在镕受审导致重要决策暂停 我感到惊恐
· 一张图看懂华为麒麟970:国产最强芯
· 8600万澳元的大项目,网友用57行代码就搞定
· 特斯拉把耐克的设计牛人挖走了 曾研发自动系鞋带系统
· Google母公司用一家“数字”公司正式完成重组
» 更多新闻…
· 写给立志做码农的大学生
· 架构腐化之谜
· 学会思考,而不只是编程
· 编写Shell脚本的最佳实践