android自定义时间日期选择器,Android开发之自定义DataTimePicker(日期时间选择器)...

本文介绍了如何在Android项目中自定义日期和时间选择器,通过组合DatePicker和TimePicker控件,并创建DateTimeDialog对话框,实现同一页面同时选择日期和时间的功能。关键步骤包括设置布局、封装工具函数以及响应事件处理。
摘要由CSDN通过智能技术生成

最近项目中,要求日期和时间在同一个页面同时选择,这个就需要自定义了,其实所谓的自定义只不过是把时间和日期对话框组合在一起而已。

一、基本知识

1、关于日期的几个控件:

DatePicker(日期选择控件)

TimePicker(时间选择控件)

DatePickerDialog(日期选择对话框)

TimePickerDialog(时间选择对话框)

AnalogClock(模拟时钟控件)

DigitalClock(数字时钟控件)

2、相关控件介绍

DatePicker 、 TimePicker 都继承自Android.widget.FrameLayout,并且默认展示风格、与操作风格也类似。DatePicker用于展示一个日期选择控件,TimePicker用于展示一个时间选择控件。

DatePicker常用相关属性:

android:calendarViewShown:是否显示日历

android:spinnersShown:是否显示为滚动条样式(会同时显示日历和滚动条样式上边两个都不设置)

android:startYear:设置可选开始年份。

android:endYear:设置可选结束年份。

android:maxDate:设置可选最大日期,以mm/dd/yyyy格式设置。

android:minDate:设置可选最小日期,以mm/dd/yyyy格式设置。

DatePicker的方法而言,除了常用获取属性的setter、getter方法之外,还需要特别注意一个初始化的方法init()方法,用于做DatePicker控件的初始化,并且设置日期被修改后,回调的响应事件。此方法的签名如下:

init(int year, int monthOfYear, int dayOfMonth, DatePicker.OnDateChangedListener onDateChangedListener)

从上面的init()方法可以看到,DatePicker被修改时响应的事件是DatePicker.OnDateChangedListener 事件,如果要响应此事件,需要实现其中的onDateChanged()方法,其中参数从签名即可了解意思,这里不再累述。

onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)

作为一个时间选择控件来说,TimePicker需要与时间相关的getter、setter方法之外,还需要有时间被修改够,回调的响应事件。

TimePicker常用方法有如下几个:

is24HourView():判断是否为24小时制。

setIs24HourView():设置是否为24小时制显示。

getCurrentXxx():获取当前时间。

setCurrentXxx():设置当前时间。

setOnTimeChangedListener():设置时间被修改的回调方法。

TimePicker控件被修改的回调方法,通过setOnTimeChangedListener()方法设置,其传递一个 TimePicker.OnTimeChangedListener 接口,需要实现其中的onTimeChanged()方法。

二、实现步骤

首先,对话框的布局:

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:gravity="center"

android:orientation="vertical">

android:id="@+id/data_picker"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:calendarViewShown="false" />

android:id="@+id/timer_picker"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

然后,封装了一个工具类:

public static void getDateTime(Context mContext, final TextView textView) {

View date_time_picker = View.inflate(mContext, R.layout.date_time_picker, null);

final DatePicker datePicker = (DatePicker) date_time_picker.findViewById(R.id.data_picker);

final TimePicker timePicker = (TimePicker) date_time_picker.findViewById(R.id.timer_picker);

timePicker.setIs24HourView(true);

// Build DateTimeDialog

AlertDialog.Builder builder = new AlertDialog.Builder(mContext);

builder.setView(date_time_picker);

builder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog, int which) {

String dateStr = datePicker.getYear() + "-" + datePicker.getMonth() + "-" + datePicker.getDayOfMonth();

int currentMinute = timePicker.getCurrentMinute();

String curMinute = "";

if (currentMinute < 10) {

curMinute = "0" + currentMinute;

} else {

curMinute = String.valueOf(currentMinute);

}

String timeStr = timePicker.getCurrentHour() + ":" + curMinute;

textView.setText(dateStr + " " + timeStr);

}

});

builder.show();

}

最后,直接调用就好了

DateUtil.getDateTime(this, tv);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值