From 98a83530e1be934755241a5c10d0a6dff8802c98 Mon Sep 17 00:00:00 2001 From: LZ <2929718516@qq.com> Date: Wed, 25 Dec 2024 21:32:49 +0800 Subject: [PATCH] =?UTF-8?q?=E8=BF=99=E6=AE=B5=E4=BB=A3=E7=A0=81=E5=AE=9A?= =?UTF-8?q?=E4=B9=89=E4=BA=86=E4=B8=80=E4=B8=AA=E8=87=AA=E5=AE=9A=E4=B9=89?= =?UTF-8?q?=E7=9A=84DateTimePickerDialog=E7=B1=BB=EF=BC=8C=E5=AE=83?= =?UTF-8?q?=E7=BB=A7=E6=89=BF=E8=87=AAAlertDialog=E5=B9=B6=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=E4=BA=86OnClickListener=E6=8E=A5=E5=8F=A3=E3=80=82?= =?UTF-8?q?=E8=BF=99=E4=B8=AA=E5=AF=B9=E8=AF=9D=E6=A1=86=E5=85=81=E8=AE=B8?= =?UTF-8?q?=E7=94=A8=E6=88=B7=E9=80=89=E6=8B=A9=E4=B8=80=E4=B8=AA=E6=97=A5?= =?UTF-8?q?=E6=9C=9F=E5=92=8C=E6=97=B6=E9=97=B4=EF=BC=8C=E5=B9=B6=E6=8F=90?= =?UTF-8?q?=E4=BE=9B=E4=BA=8624=E5=B0=8F=E6=97=B6=E5=88=B6=E5=92=8C12?= =?UTF-8?q?=E5=B0=8F=E6=97=B6=E5=88=B6=E7=9A=84=E6=98=BE=E7=A4=BA=E9=80=89?= =?UTF-8?q?=E9=A1=B9=E3=80=82=E7=94=A8=E6=88=B7=E9=80=89=E6=8B=A9=E5=AE=8C?= =?UTF-8?q?=E6=88=90=E5=90=8E=EF=BC=8C=E5=8F=AF=E4=BB=A5=E9=80=9A=E8=BF=87?= =?UTF-8?q?=E8=AE=BE=E7=BD=AE=E7=9A=84=E5=9B=9E=E8=B0=83=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?OnDateTimeSetListener=E8=8E=B7=E5=8F=96=E9=80=89=E6=8B=A9?= =?UTF-8?q?=E7=9A=84=E6=97=A5=E6=9C=9F=E5=92=8C=E6=97=B6=E9=97=B4=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DateTimePickerDialog.java | 158 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 DateTimePickerDialog.java diff --git a/DateTimePickerDialog.java b/DateTimePickerDialog.java new file mode 100644 index 0000000..f55ba91 --- /dev/null +++ b/DateTimePickerDialog.java @@ -0,0 +1,158 @@ +/* + * 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方法。 + } + } + +} \ No newline at end of file