Android开发 自定义日期选择对话框(扩展功能)
来源:互联网 发布:铁路车次查询软件 编辑:程序博客网 时间:2024/05/22 00:25
Android提供了DatePickerDialog和TimePickerDialog控件用于弹出日期和时间选择对话框,单是它们都是独立的,不能方便的设置:”yyy-MM-dd HH:mm:ss“型日期时间,所以我们需要自己定义DatePickerDialog组件来设置。
首先需要写布局界面:该界面的XML代码如下:
布局名称为:datetime.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <DatePicker android:id="@+id/datepicker" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TimePicker android:id="@+id/timepicker" android:layout_width="fill_parent" android:layout_height="wrap_content" /></LinearLayout>
分析上述代码:在布局中放入两个时间选择空间,一个用来显示日期,一个用来显示时间
然后我们开始写自定义的时间选择器的类,代码如下:
类的名称为:DateTimePickerDialog
package com.jinbi.app.ui;import java.text.SimpleDateFormat;import java.util.Calendar;import android.app.Activity;import android.app.AlertDialog;import android.app.DatePickerDialog;import android.app.TimePickerDialog;import android.content.DialogInterface;import android.widget.DatePicker;import android.widget.DatePicker.OnDateChangedListener;import android.widget.EditText;import android.widget.LinearLayout;import android.widget.TimePicker;import android.widget.TimePicker.OnTimeChangedListener;import com.jinbi.R;public class DateTimePickerDialog implements OnDateChangedListener,OnTimeChangedListener{private DatePicker datePicker;private TimePicker timePicker;private AlertDialog ad;private String dateTime;private String initDateTime;private Activity activity;/** * 日期时间弹出选择框构 * @param activity:调用的父activity */public DateTimePickerDialog(Activity activity) {this.activity = activity;}public void init(DatePicker datePicker,TimePicker timePicker) {Calendar calendar = Calendar.getInstance();initDateTime = calendar.get(Calendar.YEAR)+"-"+calendar.get(Calendar.MONTH)+"-"+ calendar.get(Calendar.DAY_OF_MONTH)+" "+ calendar.get(Calendar.HOUR_OF_DAY)+":"+ calendar.get(Calendar.MINUTE)+ calendar.get(Calendar.SECOND);datePicker.init(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH), this);timePicker.setCurrentHour(calendar.get(Calendar.HOUR_OF_DAY));timePicker.setCurrentMinute(calendar.get(Calendar.MINUTE));}public AlertDialog dateTimePickDialog(final EditText dateTimeTextEdite,int type) {Calendar c = Calendar.getInstance();switch (type) {case 1:new DatePickerDialog(activity, new DatePickerDialog.OnDateSetListener() {public void onDateSet(DatePicker view, int year, int monthOfYear,int dayOfMonth) {Calendar calendar = Calendar.getInstance();calendar.set(datePicker.getYear(), datePicker.getMonth(),datePicker.getDayOfMonth());SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd");dateTime = sdf.format(calendar.getTime());dateTimeTextEdite.setText(dateTime);}},c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DATE)).show();return null;case 2:new TimePickerDialog(activity,new TimePickerDialog.OnTimeSetListener() {@Overridepublic void onTimeSet(TimePicker view, int hourOfDay, int minute) {Calendar calendar = Calendar.getInstance();calendar.set(Calendar.YEAR,Calendar.MONTH,Calendar.DAY_OF_MONTH, timePicker.getCurrentHour(),timePicker.getCurrentMinute());SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");dateTime = sdf.format(calendar.getTime());dateTimeTextEdite.setText(dateTime);}},c.get(Calendar.HOUR_OF_DAY),c.get(Calendar.MINUTE),true).show();return null;default:LinearLayout dateTimeLayout = (LinearLayout)activity.getLayoutInflater().inflate(R.layout.datetime, null);datePicker = (DatePicker)dateTimeLayout.findViewById(R.id.datepicker);timePicker = (TimePicker)dateTimeLayout.findViewById(R.id.timepicker);init(datePicker,timePicker);timePicker.setIs24HourView(true);timePicker.setOnTimeChangedListener(this);ad = new AlertDialog.Builder(activity).setTitle(initDateTime).setView(dateTimeLayout).setPositiveButton("设置", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dateTimeTextEdite.setText(dateTime); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int whichButton) { dateTimeTextEdite.setText(""); } }).show();onDateChanged(null, 0, 0, 0);return ad;}}@Overridepublic void onTimeChanged(TimePicker arg0, int arg1, int arg2) {onDateChanged(null, 0, 0, 0);}@Overridepublic void onDateChanged(DatePicker view, int year, int monthOfYear,int dayOfMonth) {Calendar calendar = Calendar.getInstance();calendar.set(datePicker.getYear(), datePicker.getMonth(),datePicker.getDayOfMonth(),timePicker.getCurrentHour(),timePicker.getCurrentMinute());SimpleDateFormat sdf = new SimpleDateFormat("yyy-MM-dd HH:mm:ss");dateTime = sdf.format(calendar.getTime());ad.setTitle(dateTime);}}至此,该控件就算写完成了
使用该控件的方法,如下:
dietTime.setOnClickListener(new OnClickListener() {public void onClick(View v) { DateTimePickerDialog dateTimePicKDialog = new DateTimePickerDialog( RecordActivity.this); dateTimePicKDialog.dateTimePickDialog(dietTime, 0);}});
由于项目是直接部署在手机上的,所以截图不大方便,现在先不截图了,以后有机会再上图。
如果不太明白的,提供一些参考资料:
自定义日期和时间Demo
- Android开发 自定义日期选择对话框(扩展功能)
- Android开发之日期选择对话框的使用
- 自定义日期选择控件(适用于其他选择功能)
- android自定义日期选择
- Android 日期选择对话框-DatePickerDialog
- Android日期时间选择对话框
- android时间日期选择对话框
- android应用开发详解(九)------------------日期和时间选择对话框
- Android应用程序用户界面(十一)时间日期选择对话框
- Android自定义日期选择框
- Android 日期及时间选择对话框
- Android之日期及时间选择对话框
- Android之日期/时间选择对话框
- Android之日期及时间选择对话框
- Android开发笔记(六十六)自定义对话框
- Android开发使输入框点击弹出日期选择对话框的方法
- Android滚轮时间选择控件(可扩展自定义)
- 套用DatePickerDialog源码实现自定义样式的日期选择对话框
- 在Octopress上使用Disqus时,“We were unable to load Disqus..”
- Sphinx 在 windows 下安装使用
- C++ 对excel.h和excel.cpp的修改
- 物化视图的手动更新
- 如何识别ios设备的方向
- Android开发 自定义日期选择对话框(扩展功能)
- Android开发 实现图文混排功能
- jdk1.6下载地址
- NodeJS的一些个人学习笔记
- (+)第105天的交易(2013-10-15)(-50)(18.57)
- window.showModalDialog打开窗口传参,取参
- asp.net 嵌入realplayer
- 关于产品的一些思考——腾讯之第二届腾讯校园CXO首席体验官大赛报名
- jsp中的basePath和path