android通过DialogFragment实现时间选择
在android开发中,时间控件是不可或缺的一部分,特别是在设置个人生日或按时间进行搜索时都要用到。Android有内置的DatePicker和timePicker,使用起来也是相当的方便,既可以在布局中添加后findViewById调用,也可以直接在activity中重写onCreateDialog(int id)方法后调用showDialog(int id)弹出,现在网上关于android时间控件的demo也大都基于这两个控件的使用说明。但用过这两个控件的人都知道,这两个时间选择框有两个不太好的地方:1、不是特别美观2、时间控件生命周期不可控。如果想解决上面的问题,我们一般都会通过继承Dialog,写一个美观并且满足要求的时间控件。但这样花费的时间肯定比使用DatePicker和timePicker要多得多。
当然,网上还是有很多不错的开源时间控件供我们选择,如android-wheel,它是一个仿IOS滚轮样式的时间选择控件(地址:https://github.com/maarek/android-wheel),效果图如下:

android-spinnerwheel也是一个比错的时间选择控件(地址:https://github.com/ai212983/android-spinnerwheel),效果图如下:

用过datePicker和timepicker的人应该都知道showDialog(int id)其实是一个已经过时的方法,在方法的说明中我们可以找到这么一段话:This method was deprecated in API level 13.Use the new DialogFragment class with FragmentManager instead; this is also available on older platforms through the Android compatibility package.
大概意思是:showDialog(int id)这个方法在API 13就已经过时了,新API可以通过使用DialogFragment类和FragmentManager代替它,DailogFragment和FragmentManager在版本API(低于13)也是可用的,但是需要引入兼容包。
那下面我们来看看怎么通过DialogFragment和FragmentManager来实现选择时间,以及它相对于showDialog(int id)有哪些优势?
我们首先去android开发者官网找,其中官网就有这么一句话:The DialogFragment manages the dialog lifecycle for you and allows you to display the pickers in different layout configurations, such as in a basic dialog on handsets or as an embedded part of the layout on large screens.
大概意思就是:DialogFragment可以让我们自己去管理时间选择控件的生命周期并且可以让我们自己给控件设置不同的配置参数,即可以让控件以基本形状显示,也可以放到一个布局中包裹着显示在大屏幕手机上。
同样,官网上DialogFragment的使用也是很方便的。下面我们来看看:
首先,我们要自定义个Fragement并让他它继承DialogFragment,还需要让它实现TimePickerDialog.OnTimeSetListener
接口,代码如下:
public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener{
int _year=1970;
int _month=0;
int _day=0;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar c=Calendar.getInstance();
int year=c.get(Calendar.YEAR);
int month=c.get(Calendar.MONTH);
int day=c.get(Calendar.DAY_OF_MONTH);
return new DatePickerDialog(getActivity(), this, year, month, day);
}
@Override
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
// TODO 日期选择完成事件,取消时不会触发
_year=year;
_month=monthOfYear+1;
_day=dayOfMonth;
Log.i(Constant.LOG_TAG, "year="+year+",monthOfYear="+monthOfYear+",dayOfMonth="+dayOfMonth);
}
private String getValue(){
return ""+_year+_month+_day;
}
}
当我们点击某个控件后要弹出时间选择器只要直接调用下面的方法就行了。
private void showDatePickerFragemnt(){
DialogFragment fragment=new DatePickerFragment();
fragment.show(getSupportFragmentManager(), "datePicker");
}
需要我们注意的是,你的activity是需要继承FragmentActivity或ActionBarActivity的,不然无法获得FragmentManager。
更多DialogFragment使用说明地址,大家可以去http://developer.android.com/guide/topics/ui/controls/pickers.html。
android通过DialogFragment实现时间选择的更多相关文章
- Android 自定义dialogfragment
在用dialogfragment的时候我们可能会不喜欢系统自带的黑色边框,那怎么办呢? dialofragment提供可供修改样式的方法setStyle(style,R.style.MyTryUseD ...
- Android之日期及时间选择对话框
转:http://www.cnblogs.com/linjiqin/archive/2011/03/10/1980215.html main.xml布局文件 <?xml version=&quo ...
- Android开发 DialogFragment对话框详解
前言 在聊DialogFragment之前,我们看看以往我们在Android里实现一个对话框一般有这几种方式: Dialog 继承重写Dialog实现一个自定义的Dialog AlertDialog ...
- Android 官方推荐 : DialogFragment 创建对话框
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37815413 1. 概述 DialogFragment在android 3.0时 ...
- [Android Pro] Android 官方推荐 : DialogFragment 创建对话框
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37815413 1. 概述 DialogFragment在android 3.0时 ...
- Android屏幕底部弹出DialogFragment(3)
Android屏幕底部弹出DialogFragment(3) 附录文章1,2的DialogFragment是常规的DialogFragment,但是现在的一些Android开发中,往往需要从底部 ...
- 转帖:Android 官方推荐 : DialogFragment 创建对话框
转: Android 官方推荐 : DialogFragment 创建对话框 复制内容,留作备份 1. 概述 DialogFragment在android 3.0时被引入.是一种特殊的Fragment ...
- Android开发:使用DialogFragment实现dialog自定义布局
使用DialogFragment实现dialog的自定义布局最大的好处是可以更好控制dialog的生命周期. TestFragment的代码: public class TestFragment ex ...
- Android 对话框简介
对话框(Dialog)是程序运行过程中弹出的窗口,Android中有好多种对话框,如警告对话框,进度对话框,列表对话框,单选对话框,日期选择对话框,时间选择对话框等: 下面用几个例子来演示一下各种对话 ...
随机推荐
- TopCoder SRM 701 Div2 Problem 900 ThueMorseGame(博弈+预处理)
题意 Alice和Bob在玩一个游戏,Alice先手. 每次一个人可以从一堆式子中拿走任意数量(不超过m)的式子. 取走最后一颗式子的人胜利. 当一个取完某一步的时候剩下的石子数量的二进制表示中1的 ...
- pycharm上传代码到码云错误现象用户密码
>>出现此时错误说明在pycharm>git登录用户名或密码是错误的(必须填成是自己注册的码云邮箱和密码 不允许出现中文)并且无法在当前修改用户名或密码 >>接下来打开电 ...
- Java文件夹操作,判断多级路径是否存在,不存在就创建(包括windows和linux下的路径字符分析),兼容Windows和Linux
兼容windows和linux. 分析: 在windows下路径有以下表示方式: (标准)D:\test\1.txt (不标准,参考linux)D:/test/1.txt 然后在java中,尤其使用F ...
- Direct2D教程(二)来看D2D世界中的Hello,World
引子 任何一门语言的第一个教程几乎都是Hello,world.我们也不例外,但是这里不是教大家打印Hello,world,而是编写一个简单的D2D绘制程序,让大家对Direct2D的程序结构及编程方法 ...
- 老司机找bug的十年心路历程
一.码畜:靠编译器帮自己查语法错误 消灭笔误:编写适合程序猿的键盘练习 if (常量==变量或表达式) 使用goto接力超长的if,switch 连续的if还是if elseif 多个条件的组合:精心 ...
- 客户端svn出现authorization failed异常
原文:https://blog.csdn.net/big1989wmf/article/details/70144470 发现,原来是 服务端上面 svnserve 这个进程没有启动起来 然后,再试一 ...
- 百科知识 DCR文件如何打开
使用IE可以打开,但是需要先安装Adobe Shockwave Player 天空软件下载地址:http://fpdownload.macromedia.com/get/shockwave/defau ...
- Office HPDeskjetD2468 打印机电源灯闪烁不停,打印机不工作怎么办
怎么处理HP DeskjetD2468 打印机电源灯闪烁不停,打印机不工作? 最佳答案 一般电源灯闪烁时因为你的打印喷头上面的盖子没有盖好,你看看.....盖好之后关机再开 谢谢!
- java性能监控工具jstat-windows
jstat Monitors Java Virtual Machine (JVM) statistics. This command is experimental and unsupported. ...
- java.lang.String中的trim()方法的详细说明(转)
String.Trim()方法到底为我们做了什么,仅仅是去除字符串两端的空格吗? 一直以为Trim()方法就是把字符串两端的空格字符给删去,其实我错了,而且错的比较离谱. 首先我直接反编译String ...