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

  (一)日期选择器

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

 import android.app.DatePickerDialog;
import android.content.Context;
import android.widget.DatePicker; public class MyDatePickerDialog extends DatePickerDialog { public MyDatePickerDialog (Context context, OnDateSetListener callBack,
int year, int monthOfYear, int dayOfMonth) {
super(context, callBack, year, monthOfYear, dayOfMonth); this.setTitle("选择任务的日期");
this.setButton2("取消", (OnClickListener)null);
this.setButton("确定", this); //setButton和this参数组合表示这个按钮是确定按钮 } @Override
public void onDateChanged(DatePicker view, int year, int month, int day) {
super.onDateChanged(view, year, month, day);
this.setTitle("选择任务的日期");
} }

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

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

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

 import java.util.Calendar;

 import android.app.Dialog;
import android.app.DialogFragment;
import android.os.Bundle;
import android.widget.DatePicker;
import android.app.DatePickerDialog; public class DatePickerFragment extends DialogFragment implements
DatePickerDialog.OnDateSetListener {
@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 MyDatePickerDialog(getActivity(), this, year, month, day);
} @Override
public void onDateSet(DatePicker view, int year, int month, int day) { } }

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

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

  效果:

  (二)时间选择器

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

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

 import android.app.TimePickerDialog;
import android.content.Context;
import android.content.DialogInterface.OnClickListener;
import android.widget.TimePicker; public class MyTimePickerDialog extends TimePickerDialog { public MyTimePickerDialog (Context context, OnTimeSetListener callBack,
int hourOfDay, int minute, boolean is24HourView) {
super(context, callBack, hourOfDay, minute, is24HourView); this.setTitle("选择任务的时间");
this.setButton2("取消", (OnClickListener)null);
this.setButton("确定", this); //setButton和this参数组合表示这个按钮是确定按钮
} @Override
public void onTimeChanged(TimePicker view, int hourOfDay, int minute) {
super.onTimeChanged(view, hourOfDay, minute);
this.setTitle("选择任务的时间");
} }

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

 public class TimePickerFragment extends DialogFragment implements
TimePickerDialog.OnTimeSetListener { @Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final Calendar calendar = Calendar.getInstance();
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE); return new MyTimePickerDialog(getActivity(), this, hour, minute,
DateFormat.is24HourFormat(getActivity()));
} @Override
public void onTimeSet(TimePicker view, int hourOfDay, int minute) { }
}

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

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

  效果:

随机推荐

  1. 中移苏研DCOS实践之路完整篇

    一.实践背景 1.1现网生产系统存在的问题 在中国移动内部各省市公司,由于技术迭代.设备更新的原因,设备繁杂,有x86server .VMware虚拟机.OpenStack虚拟机以及不同厂商的物理机( ...

  2. Vuex 2 入门与提高。

    从计数器开始 让我们从一个简单的计数器,开始进入Vuex 的世界: 计数器应用的数据模型很简单:使用一个counter属性来表示计数器的 当前值就够了. 在Vue实例的created钩子 中,应用启动 ...

  3. 基于consul构建golang系统分布式服务发现机制

    原文地址-石匠的Blog: http://www.bugclosed.com/post/5 在分布式架构中,服务治理是一个重要的问题.在没有服务治理的分布式集群中,各个服务之间通过手工或者配置的方式进 ...

  4. java中.currentTimeMillis的用法和含义

    用法:可以用法获取当前时间的毫秒数,可以通过毫秒数进行时间比较,时间转化以及时间格式化等.public class SystemTime {public static void main(String ...

  5. merge实现拉链表

    建表如下( 历史拉链表): 新表(每日更新的): 实现语句: MERGE INTO test_target t1 USING ( SELECT nvl(c.id, b.id) AS id ,CASE ...

  6. 黑马day11 事务的四大特性

    1.事务的四大特性:一个事务具有的最主要的特性.一个设计良好的数据库能够为我们保证这四大特性. 1.1原子性:原子性是指事务是一个不可切割的工作单位,事务中的操作要么都发生要么都不发生. 1.2一致性 ...

  7. QQ宠物怀念版H5

    <QQ宠物>相伴十三载 哇!明信片邮到了!!开心ヽ(○^㉨^)ノ♪ 大乐斗Ⅱ 怀念一波...

  8. 单线程爬虫VS多线程爬虫的效率对比

    单线程爬虫: import re import requests import time url_EB = 'http://www.amazon.com/gp/search/other/ref=sr_ ...

  9. (翻译) TFS源码控制的未来 (TFSVC vs. Git)

    博主: 翻译自微软Visual Studio ALM产品组老大Brian Harry 的博客文章 The future of Team Foundation Server Version contro ...

  10. Log4j 使用

    源博客 http://www.cnblogs.com/alipayhutu/archive/2012/06/21/2558249.html#3159794 [1]从零开始 a). 新建Java Pro ...