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.
5MI/DateTimePickerDialog.java

158 lines
6.2 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.

/*
* Copyright (c) 2010-2011, The MiCode Open Source Community (www.micode.net)
*
* 版权信息表明这段代码由MiCode开源社区在2010-2011年间创作。
*
* Licensed under the Apache License, Version 2.0 (the "License");
*
* 声明这段代码遵循Apache License 2.0版本。
*
* you may not use this file except in compliance with the License.
*
* 除非遵守该许可协议,否则不得使用此文件。
*
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* 可以在上述网址获取该许可协议的副本。
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
*
* 除非适用法律要求或书面同意,否则按照“现状”分发该软件,
*
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
*
* 不提供任何明示或暗示的担保或条件。
*
* See the License for the specific language governing permissions and
* limitations under the License.
*
* 参见许可协议了解具体的权限和限制。
*/
package net.micode.notes.ui;
// 声明包名
import java.util.Calendar;
// 导入Java的Calendar类用于处理日期和时间。
import net.micode.notes.R;
// 导入项目资源文件。
import net.micode.notes.ui.DateTimePicker;
// 导入自定义的DateTimePicker类。
import net.micode.notes.ui.DateTimePicker.OnDateTimeChangedListener;
// 导入DateTimePicker类的内部接口OnDateTimeChangedListener。
import android.app.AlertDialog;
// 导入Android的AlertDialog类用于显示对话框。
import android.content.Context;
// 导入Android的Context类表示应用环境的全局信息。
import android.content.DialogInterface;
// 导入Android的DialogInterface接口表示对话框的接口。
import android.content.DialogInterface.OnClickListener;
// 导入DialogInterface接口中的OnClickListener内部接口用于处理对话框按钮的点击事件。
import android.text.format.DateFormat;
// 导入Android的DateFormat类用于格式化日期。
import android.text.format.DateUtils;
// 导入Android的DateUtils类提供日期和时间的格式化方法。
public class DateTimePickerDialog extends AlertDialog implements OnClickListener {
// 声明DateTimePickerDialog类它继承自AlertDialog并实现OnClickListener接口。
private Calendar mDate = Calendar.getInstance();
// 声明一个Calendar对象用于存储日期和时间。
private boolean mIs24HourView;
// 声明一个布尔变量用于指示是否使用24小时制显示时间。
private OnDateTimeSetListener mOnDateTimeSetListener;
// 声明一个OnDateTimeSetListener接口类型的变量用于回调日期时间设置完成的操作。
private DateTimePicker mDateTimePicker;
// 声明一个DateTimePicker对象用于显示日期和时间选择器。
// 声明一个内部接口OnDateTimeSetListener用于回调日期时间设置完成的操作。
public interface OnDateTimeSetListener {
void OnDateTimeSet(AlertDialog dialog, long date);
}
// DateTimePickerDialog的构造函数初始化对话框。
public DateTimePickerDialog(Context context, long date) {
super(context);
mDateTimePicker = new DateTimePicker(context);
// 创建DateTimePicker对象。
setView(mDateTimePicker);
// 设置对话框的内容视图为DateTimePicker。
mDateTimePicker.setOnDateTimeChangedListener(new OnDateTimeChangedListener() {
// 设置日期时间变化监听器。
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);
// 设置Calendar对象的初始时间为传入的日期。
mDate.set(Calendar.SECOND, 0);
// 将秒数设置为0。
mDateTimePicker.setCurrentDate(mDate.getTimeInMillis());
// 设置DateTimePicker的当前日期时间。
setButton(context.getString(R.string.datetime_dialog_ok), this);
// 设置对话框的确定按钮文本和点击事件监听器。
setButton2(context.getString(R.string.datetime_dialog_cancel), (OnClickListener)null);
// 设置对话框的取消按钮文本,不设置点击事件监听器。
set24HourView(DateFormat.is24HourFormat(this.getContext()));
// 根据系统设置初始化24小时制显示。
updateTitle(mDate.getTimeInMillis());
// 更新对话框标题。
}
// 设置是否使用24小时制显示时间。
public void set24HourView(boolean is24HourView) {
mIs24HourView = is24HourView;
}
// 设置日期时间设置完成的回调监听器。
public void setOnDateTimeSetListener(OnDateTimeSetListener callBack) {
mOnDateTimeSetListener = callBack;
}
// 更新对话框标题。
private void updateTitle(long date) {
int flag =
DateUtils.FORMAT_SHOW_YEAR |
DateUtils.FORMAT_SHOW_DATE |
DateUtils.FORMAT_SHOW_TIME;
// 设置日期时间格式标志。
flag |= mIs24HourView ? DateUtils.FORMAT_24HOUR : DateUtils.FORMAT_12HOUR;
// 根据是否使用24小时制设置格式标志。
setTitle(DateUtils.formatDateTime(this.getContext(), date, flag));
// 使用DateUtils格式化日期时间并设置为对话框标题。
}
// 处理对话框按钮的点击事件。
public void onClick(DialogInterface arg0, int arg1) {
if (mOnDateTimeSetListener != null) {
mOnDateTimeSetListener.OnDateTimeSet(this, mDate.getTimeInMillis());
// 如果设置了日期时间设置完成的回调监听器则调用其OnDateTimeSet方法。
}
}
}