DateTimePickerDialog类是一个自定义对话框组件,用于让用户选择日期和时间。它结合了日期选择器和时间选择器的功能,提供了统一的界面来选择特定的时间点。

1.主要功能和特点:
。继承结构:继承自 AlertDialog,因此具有对话框的基本特性。
。自定义视图:使用 DateTimePicker作为其内容视图,该视图包含了日期和时间选择器。
。时间处理:使用 Calendar 对象管理日期和时间,确保时区和格式的一致性。
。24 小时制支持:可根据系统设置或用户偏好显示 24 小时制或 12 小时制时间。
。回调接口:通过OnDateTimeSetListener接口,允许外部类获取用户选择的日期和时间。
。标题自动更新:在用户更改日期或时间时,自动更新对话框标题以反映当前选择。
。按钮事件处理:提供 "确定" 和 "取消" 按钮,并处理相应的点击事件。
2.核心方法:
。set24HourView():设置时间显示格式(24 小时制或 12 小时制)。
。setOnDateTimeSetListener():注册回调接口,用于获取用户选择的时间。
。updateTitle():更新对话框标题,显示当前选择的日期和时间。
。onClick():处理按钮点击事件,在用户点击 "确定" 时触发回调。
3.应用场景:
适用于需要用户选择具体日期和时间的场景,如设置提醒、安排日程等。通过该类,开发者可以方便地集成一个功能完整的日期时间选择界面,而无需自己实现复杂的布局和逻辑。
main
1148980035@qq.com 10 months ago
parent cba187155a
commit ef4c40bc22

@ -29,59 +29,129 @@ import android.content.DialogInterface.OnClickListener;
import android.text.format.DateFormat;
import android.text.format.DateUtils;
/**
* DateTimePickerDialog
* AlertDialog OnClickListener
*/
public class DateTimePickerDialog extends AlertDialog implements OnClickListener {
// 用于存储选择的日期和时间
private Calendar mDate = Calendar.getInstance();
// 标记是否使用 24 小时制显示时间
private boolean mIs24HourView;
// 日期和时间设置监听器,当用户点击确定按钮时触发
private OnDateTimeSetListener mOnDateTimeSetListener;
// 自定义的日期和时间选择器视图
private DateTimePicker mDateTimePicker;
/**
*
*/
public interface OnDateTimeSetListener {
/**
*
*
* @param dialog
* @param date
*/
void OnDateTimeSet(AlertDialog dialog, long date);
}
/**
* DateTimePickerDialog
*
* @param context
* @param date
*/
public DateTimePickerDialog(Context context, long date) {
super(context);
// 创建 DateTimePicker 实例
mDateTimePicker = new DateTimePicker(context);
// 将 DateTimePicker 设置为对话框的视图
setView(mDateTimePicker);
// 为 DateTimePicker 设置日期和时间改变监听器
mDateTimePicker.setOnDateTimeChangedListener(new OnDateTimeChangedListener() {
/**
*
*
* @param view DateTimePicker
* @param year
* @param month 0-11
* @param dayOfMonth
* @param hourOfDay 0-23
* @param minute
*/
public void onDateTimeChanged(DateTimePicker view, int year, int month,
int dayOfMonth, int hourOfDay, int minute) {
// 更新 mDate 对象的日期和时间
mDate.set(Calendar.YEAR, year);
mDate.set(Calendar.MONTH, month);
mDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
mDate.set(Calendar.HOUR_OF_DAY, hourOfDay);
mDate.set(Calendar.MINUTE, minute);
// 更新对话框的标题,显示当前选择的日期和时间
updateTitle(mDate.getTimeInMillis());
}
});
// 设置 mDate 对象的初始时间
mDate.setTimeInMillis(date);
// 将秒数设置为 0
mDate.set(Calendar.SECOND, 0);
// 设置 DateTimePicker 的当前日期和时间
mDateTimePicker.setCurrentDate(mDate.getTimeInMillis());
// 设置对话框的确定按钮,并为其设置点击监听器(即当前类实例)
setButton(context.getString(R.string.datetime_dialog_ok), this);
// 设置对话框的取消按钮,不设置点击监听器
setButton2(context.getString(R.string.datetime_dialog_cancel), (OnClickListener)null);
// 根据系统设置确定是否使用 24 小时制
set24HourView(DateFormat.is24HourFormat(this.getContext()));
// 更新对话框的标题,显示初始日期和时间
updateTitle(mDate.getTimeInMillis());
}
/**
* 使 24
*
* @param is24HourView true使 24 使 12
*/
public void set24HourView(boolean is24HourView) {
mIs24HourView = is24HourView;
}
/**
*
*
* @param callBack OnDateTimeSetListener
*/
public void setOnDateTimeSetListener(OnDateTimeSetListener callBack) {
mOnDateTimeSetListener = callBack;
}
/**
*
*
* @param date
*/
private void updateTitle(long date) {
// 设置日期和时间格式化标志
int flag =
DateUtils.FORMAT_SHOW_YEAR |
DateUtils.FORMAT_SHOW_DATE |
DateUtils.FORMAT_SHOW_TIME;
// 根据 mIs24HourView 标志添加相应的格式化标志
flag |= mIs24HourView ? DateUtils.FORMAT_24HOUR : DateUtils.FORMAT_24HOUR;
// 使用 DateUtils 格式化日期和时间,并设置为对话框的标题
setTitle(DateUtils.formatDateTime(this.getContext(), date, flag));
}
/**
*
*
* @param arg0
* @param arg1
*/
public void onClick(DialogInterface arg0, int arg1) {
// 如果设置了日期和时间设置监听器,则调用其 OnDateTimeSet 方法
if (mOnDateTimeSetListener != null) {
mOnDateTimeSetListener.OnDateTimeSet(this, mDate.getTimeInMillis());
}

Loading…
Cancel
Save