You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
xiaomi/src/ui/DateTimePickerDialog.java

149 lines
5.5 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*
* 版权所有 (c) 2010-2011MiCode 开源社区 (www.micode.net)
* 根据 Apache 许可证 2.0 版本("许可证")授权;
* 除非符合许可证的规定,否则不得使用本文件。
* 您可以从以下网址获取许可证副本:
* http://www.apache.org/licenses/LICENSE-2.0
* 除非适用法律要求或书面同意,本软件按"原样"分发,
* 没有任何明示或暗示的保证或条件。
* 详见许可证中规定的权限和限制。
* 这是一份标准的Apache许可证2.0版本的开源声明)
*/
// 定义包路径
package net.micode.notes.ui;
// 导入Java工具类
import java.util.Calendar; // 日期时间处理类
// 导入项目资源
import net.micode.notes.R; // 资源ID引用
// 导入自定义组件
import net.micode.notes.ui.DateTimePicker; // 日期时间选择器
import net.micode.notes.ui.DateTimePicker.OnDateTimeChangedListener; // 时间变化监听器
// 导入Android相关类
import android.app.AlertDialog; // 对话框基类
import android.content.Context; // 上下文对象
import android.content.DialogInterface; // 对话框接口
import android.content.DialogInterface.OnClickListener; // 点击监听器
import android.text.format.DateFormat; // 日期格式化工具
import android.text.format.DateUtils; // 日期工具类
/**
* 日期时间选择对话框
* 将DateTimePicker封装在AlertDialog中提供完整的日期时间选择功能
*/
public class DateTimePickerDialog extends AlertDialog implements OnClickListener {
// 成员变量
private Calendar mDate = Calendar.getInstance(); // 当前选择的日期时间
private boolean mIs24HourView; // 是否为24小时制
private OnDateTimeSetListener mOnDateTimeSetListener; // 回调监听器
private DateTimePicker mDateTimePicker; // 内嵌的日期时间选择器
/**
* 日期时间设置回调接口
*/
public interface OnDateTimeSetListener {
void OnDateTimeSet(AlertDialog dialog, long date); // 点击确定时回调
}
/**
* 构造函数
* @param context 上下文对象
* @param date 初始时间(时间戳)
*/
public DateTimePickerDialog(Context context, long date) {
super(context);
// 初始化日期时间选择器
mDateTimePicker = new DateTimePicker(context);
setView(mDateTimePicker); // 将选择器添加到对话框
// 设置时间变化监听器
mDateTimePicker.setOnDateTimeChangedListener(new OnDateTimeChangedListener() {
@Override
public void onDateTimeChanged(DateTimePicker view, int year, int month,
int dayOfMonth, int hourOfDay, int minute) {
// 更新内部Calendar对象
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.setTimeInMillis(date);
mDate.set(Calendar.SECOND, 0); // 秒数归零
mDateTimePicker.setCurrentDate(mDate.getTimeInMillis());
// 添加确定/取消按钮
setButton(DialogInterface.BUTTON_POSITIVE,
context.getString(R.string.datetime_dialog_ok), this);
setButton(DialogInterface.BUTTON_NEGATIVE,
context.getString(R.string.datetime_dialog_cancel),
(OnClickListener)null);
// 根据系统设置初始化24小时制显示
set24HourView(DateFormat.is24HourFormat(this.getContext()));
// 初始化标题显示
updateTitle(mDate.getTimeInMillis());
}
/**
* 设置24小时制显示模式
* @param is24HourView true为24小时制false为12小时制
*/
public void set24HourView(boolean is24HourView) {
mIs24HourView = is24HourView;
// 注意这里未实际传递给DateTimePicker可能需要额外处理
}
/**
* 设置日期时间确定回调
* @param callBack 回调接口
*/
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; // 显示时间
// 添加24小时制标志注意原代码有错误应该是FORMAT_24HOUR或FORMAT_12HOUR
flag |= mIs24HourView ? DateUtils.FORMAT_24HOUR : DateUtils.FORMAT_12HOUR;
// 设置格式化后的标题
setTitle(DateUtils.formatDateTime(
this.getContext(), // 上下文
date, // 时间戳
flag)); // 格式标志
}
/**
* 确定按钮点击回调
*/
@Override
public void onClick(DialogInterface arg0, int arg1) {
// 触发回调事件
if (mOnDateTimeSetListener != null) {
mOnDateTimeSetListener.OnDateTimeSet(
this, // 当前对话框实例
mDate.getTimeInMillis()); // 最终选择的时间戳
}
}
}