在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实现时间选择的更多相关文章

  1. Android 自定义dialogfragment

    在用dialogfragment的时候我们可能会不喜欢系统自带的黑色边框,那怎么办呢? dialofragment提供可供修改样式的方法setStyle(style,R.style.MyTryUseD ...

  2. Android之日期及时间选择对话框

    转:http://www.cnblogs.com/linjiqin/archive/2011/03/10/1980215.html main.xml布局文件 <?xml version=&quo ...

  3. Android开发 DialogFragment对话框详解

    前言 在聊DialogFragment之前,我们看看以往我们在Android里实现一个对话框一般有这几种方式: Dialog 继承重写Dialog实现一个自定义的Dialog AlertDialog ...

  4. Android 官方推荐 : DialogFragment 创建对话框

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37815413 1. 概述 DialogFragment在android 3.0时 ...

  5. [Android Pro] Android 官方推荐 : DialogFragment 创建对话框

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37815413 1. 概述 DialogFragment在android 3.0时 ...

  6. Android屏幕底部弹出DialogFragment(3)

     Android屏幕底部弹出DialogFragment(3) 附录文章1,2的DialogFragment是常规的DialogFragment,但是现在的一些Android开发中,往往需要从底部 ...

  7. 转帖:Android 官方推荐 : DialogFragment 创建对话框

    转: Android 官方推荐 : DialogFragment 创建对话框 复制内容,留作备份 1. 概述 DialogFragment在android 3.0时被引入.是一种特殊的Fragment ...

  8. Android开发:使用DialogFragment实现dialog自定义布局

    使用DialogFragment实现dialog的自定义布局最大的好处是可以更好控制dialog的生命周期. TestFragment的代码: public class TestFragment ex ...

  9. Android 对话框简介

    对话框(Dialog)是程序运行过程中弹出的窗口,Android中有好多种对话框,如警告对话框,进度对话框,列表对话框,单选对话框,日期选择对话框,时间选择对话框等: 下面用几个例子来演示一下各种对话 ...

随机推荐

  1. LeetCode OJ--Construct Binary Tree from Preorder and Inorder Traversal *

    http://oj.leetcode.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal/ 根据二叉树的前序遍 ...

  2. 微信小程序 使用HMACSHA1和md5为登陆注册报文添加指纹验证签名

    对接口请求报文作指纹验证签名相信在开发中经常碰到, 这次在与java后端一起开发小程序时,就碰到需求对登陆注册请求报文添加指纹验证签名来防止信息被修改 先来看下我们与后端定制签名规则 2.4. 签名规 ...

  3. Gym 101917 E 简单计算几何,I 最大流

    题目链接 https://codeforces.com/gym/101917 E 题意:给定一个多边形(n个点),然后逆时针旋转A度,然后对多边形进行规约,每个点的x规约到[0,w]范围内,y规约到[ ...

  4. 【WEB基础】HTML & CSS 基础入门(7)表格

    表格的基本结构 表格是网页上最常见的元素,它除了可以用来展示数据,还常常被用来排版.虽然现在提倡使用DIV+CSS完成页面布局,但表格框架简单明了,对于繁杂的数据,一个简洁的表格能让其展现的极有条理. ...

  5. 东方14模拟赛之noip2015/day1/3/神奇的幻方

    总时间限制:  10000ms 单个测试点时间限制:  1000ms 内存限制:  128000kB 描述 幻方是一种很神奇的N*N 矩阵:它由数字 1,2,3, … …,N*N 构成,且每行.每列及 ...

  6. JAVA算法总结_时间复杂度_Demo

    JAVA面试中经常问到排序算法问题,本人结合网络上一些资源整理了编写一下常用的Demo,并附带运行结果,希望能帮助到大家. /** * @Title: 冒泡排序 * @Description: 将数组 ...

  7. vue Syntax Error: Unexpected token {

    > music@1.0.0 dev F:\music\music> node build/dev-server.js > Starting dev server...ERROR Fa ...

  8. [Algorithms] Quicksort algorithm using TypeScript

    Quicksort (also called partition sort and pivot sort) is arguably the most used sorting algorithm. I ...

  9. 微信授权网页登陆,oauth

    1.在微信公众号请求用户网页授权之前.开发人员须要先到公众平台官网中的开发人员中心页配置授权回调域名.请注意,这里填写的是域名(是一个字符串),而不是URL,因此请勿加http://等协议头. 2.授 ...

  10. uva 1378 - A Funny Stone Game sg博弈

    题意:David 玩一个石子游戏. 游戏中,有n堆石子,被编号为0..n-1.两名玩家轮流取石子. 每一轮游戏.每名玩家选取3堆石子i,j,k(i<j,j<=k,且至少有一枚石子在第i堆石 ...