From eba3cd801bbfdfa9303d969717e73a87fe504ef1 Mon Sep 17 00:00:00 2001 From: Mu xingwang <390087524@qq.com> Date: Fri, 2 Dec 2022 08:41:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=96=87=E6=A1=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../net/micode/notes/tool/ResourceParser.java | 4 +- .../net/micode/notes/ui/DateTimePicker.java | 60 ++++++++++++------ .../micode/notes/ui/DateTimePickerDialog.java | 27 ++++++-- .../net/micode/notes/ui/DropdownMenu.java | 10 ++- .../micode/notes/ui/FoldersListAdapter.java | 21 ++++-- 项目文档.docx | Bin 0 -> 29481 bytes 6 files changed, 84 insertions(+), 38 deletions(-) create mode 100644 项目文档.docx diff --git a/app/src/main/java/net/micode/notes/tool/ResourceParser.java b/app/src/main/java/net/micode/notes/tool/ResourceParser.java index 7fddbcd..0c06a11 100644 --- a/app/src/main/java/net/micode/notes/tool/ResourceParser.java +++ b/app/src/main/java/net/micode/notes/tool/ResourceParser.java @@ -37,7 +37,7 @@ import net.micode.notes.ui.NotesPreferenceActivity; * @BG_DEFAULT_COLOR 默认背景颜色(黄) * BG_DEFAULT_FONT_SIZE 默认文本大小(中) */ - +//这部分用来控制笔记界面的颜色 public class ResourceParser { public static final int YELLOW = 0; @@ -47,7 +47,7 @@ public class ResourceParser { public static final int RED = 4; public static final int BG_DEFAULT_COLOR = YELLOW; - +//用来控制字体的大小 public static final int TEXT_SMALL = 0; public static final int TEXT_MEDIUM = 1; public static final int TEXT_LARGE = 2; diff --git a/app/src/main/java/net/micode/notes/ui/DateTimePicker.java b/app/src/main/java/net/micode/notes/ui/DateTimePicker.java index 496b0cd..032455c 100644 --- a/app/src/main/java/net/micode/notes/ui/DateTimePicker.java +++ b/app/src/main/java/net/micode/notes/ui/DateTimePicker.java @@ -29,7 +29,8 @@ import android.widget.FrameLayout; import android.widget.NumberPicker; public class DateTimePicker extends FrameLayout { - + //FrameLayout是布局模板之一 + //所有的子元素全部在屏幕的右上方 private static final boolean DEFAULT_ENABLE_STATE = true; private static final int HOURS_IN_HALF_DAY = 12; @@ -45,13 +46,15 @@ public class DateTimePicker extends FrameLayout { private static final int MINUT_SPINNER_MAX_VAL = 59; private static final int AMPM_SPINNER_MIN_VAL = 0; private static final int AMPM_SPINNER_MAX_VAL = 1; - + //初始化控件 private final NumberPicker mDateSpinner; private final NumberPicker mHourSpinner; private final NumberPicker mMinuteSpinner; private final NumberPicker mAmPmSpinner; + //NumberPicker是数字选择器 + //这里定义的四个变量全部是在设置闹钟时需要选择的变量(如日期、时、分、上午或者下午) private Calendar mDate; - + //定义了Calendar类型的变量mDate,用于操作时间 private String[] mDateDisplayValues = new String[DAYS_IN_ALL_WEEK]; private boolean mIsAm; @@ -71,41 +74,49 @@ public class DateTimePicker extends FrameLayout { updateDateControl(); onDateTimeChanged(); } - }; + };//OnValueChangeListener,这是时间改变监听器,这里主要是对日期的监听 + //将现在日期的值传递给mDate;updateDateControl是同步操作 private NumberPicker.OnValueChangeListener mOnHourChangedListener = new NumberPicker.OnValueChangeListener() { + //这里是对 小时(Hour) 的监听 @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { boolean isDateChanged = false; Calendar cal = Calendar.getInstance(); + //声明一个Calendar的变量cal,便于后续的操作 if (!mIs24HourView) { if (!mIsAm && oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY) { cal.setTimeInMillis(mDate.getTimeInMillis()); cal.add(Calendar.DAY_OF_YEAR, 1); isDateChanged = true; + //这里是对于12小时制时,晚上11点和12点交替时对日期的更改 } else if (mIsAm && oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1) { cal.setTimeInMillis(mDate.getTimeInMillis()); cal.add(Calendar.DAY_OF_YEAR, -1); isDateChanged = true; } + //这里是对于12小时制时,凌晨11点和12点交替时对日期的更改 if (oldVal == HOURS_IN_HALF_DAY - 1 && newVal == HOURS_IN_HALF_DAY || oldVal == HOURS_IN_HALF_DAY && newVal == HOURS_IN_HALF_DAY - 1) { mIsAm = !mIsAm; updateAmPmControl(); - } + }//这里是对于12小时制时,中午11点和12点交替时对AM和PM的更改 } else { if (oldVal == HOURS_IN_ALL_DAY - 1 && newVal == 0) { cal.setTimeInMillis(mDate.getTimeInMillis()); cal.add(Calendar.DAY_OF_YEAR, 1); isDateChanged = true; + //这里是对于24小时制时,晚上11点和12点交替时对日期的更改 } else if (oldVal == 0 && newVal == HOURS_IN_ALL_DAY - 1) { cal.setTimeInMillis(mDate.getTimeInMillis()); cal.add(Calendar.DAY_OF_YEAR, -1); isDateChanged = true; } - } + } //这里是对于12小时制时,凌晨11点和12点交替时对日期的更改 int newHour = mHourSpinner.getValue() % HOURS_IN_HALF_DAY + (mIsAm ? 0 : HOURS_IN_HALF_DAY); + //通过数字选择器对newHour的赋值 mDate.set(Calendar.HOUR_OF_DAY, newHour); + //通过set函数将新的Hour值传给mDate onDateTimeChanged(); if (isDateChanged) { setCurrentYear(cal.get(Calendar.YEAR)); @@ -117,15 +128,19 @@ public class DateTimePicker extends FrameLayout { private NumberPicker.OnValueChangeListener mOnMinuteChangedListener = new NumberPicker.OnValueChangeListener() { @Override + //这里是对 分钟(Minute)改变的监听 public void onValueChange(NumberPicker picker, int oldVal, int newVal) { int minValue = mMinuteSpinner.getMinValue(); int maxValue = mMinuteSpinner.getMaxValue(); int offset = 0; + //设置offset,作为小时改变的一个记录数据 if (oldVal == maxValue && newVal == minValue) { offset += 1; } else if (oldVal == minValue && newVal == maxValue) { offset -= 1; } + //如果原值为59,新值为0,则offset加1 + //如果原值为0,新值为59,则offset减1 if (offset != 0) { mDate.add(Calendar.HOUR_OF_DAY, offset); mHourSpinner.setValue(getCurrentHour()); @@ -145,6 +160,7 @@ public class DateTimePicker extends FrameLayout { }; private NumberPicker.OnValueChangeListener mOnAmPmChangedListener = new NumberPicker.OnValueChangeListener() { + //对AM和PM的监听 @Override public void onValueChange(NumberPicker picker, int oldVal, int newVal) { mIsAm = !mIsAm; @@ -160,24 +176,27 @@ public class DateTimePicker extends FrameLayout { public interface OnDateTimeChangedListener { void onDateTimeChanged(DateTimePicker view, int year, int month, - int dayOfMonth, int hourOfDay, int minute); + int dayOfMonth, int hourOfDay, int minute); } public DateTimePicker(Context context) { this(context, System.currentTimeMillis()); - } + }//通过对数据库的访问,获取当前的系统时间 public DateTimePicker(Context context, long date) { this(context, date, DateFormat.is24HourFormat(context)); - } + }//上面函数的得到的是一个天文数字(1970至今的秒数),需要DateFormat将其变得有意义 public DateTimePicker(Context context, long date, boolean is24HourView) { super(context); + //获取系统时间 mDate = Calendar.getInstance(); mInitialising = true; mIsAm = getCurrentHourOfDay() >= HOURS_IN_HALF_DAY; inflate(context, R.layout.datetime_picker, this); - + //如果当前Activity里用到别的layout,比如对话框layout + //还要设置这个layout上的其他组件的内容,就必须用inflate()方法先将对话框的layout找出来 + //然后再用findViewById()找到它上面的其它组件 mDateSpinner = (NumberPicker) findViewById(R.id.date); mDateSpinner.setMinValue(DATE_SPINNER_MIN_VAL); mDateSpinner.setMaxValue(DATE_SPINNER_MAX_VAL); @@ -185,7 +204,7 @@ public class DateTimePicker extends FrameLayout { mHourSpinner = (NumberPicker) findViewById(R.id.hour); mHourSpinner.setOnValueChangedListener(mOnHourChangedListener); - mMinuteSpinner = (NumberPicker) findViewById(R.id.minute); + mMinuteSpinner = (NumberPicker) findViewById(R.id.minute); mMinuteSpinner.setMinValue(MINUT_SPINNER_MIN_VAL); mMinuteSpinner.setMaxValue(MINUT_SPINNER_MAX_VAL); mMinuteSpinner.setOnLongPressUpdateInterval(100); @@ -226,7 +245,9 @@ public class DateTimePicker extends FrameLayout { mAmPmSpinner.setEnabled(enabled); mIsEnabled = enabled; } - + //存在疑问!!!!!!!!!!!!!setEnabled的作用 + //下面的代码通过原程序的注释已经比较清晰,另外可以通过函数名来判断 + //下面的各函数主要是对上面代码引用到的各函数功能的实现 @Override public boolean isEnabled() { return mIsEnabled; @@ -239,7 +260,7 @@ public class DateTimePicker extends FrameLayout { */ public long getCurrentDateInTimeMillis() { return mDate.getTimeInMillis(); - } + }//实现函数——得到当前的秒数 /** * Set the current date @@ -251,7 +272,7 @@ public class DateTimePicker extends FrameLayout { cal.setTimeInMillis(date); setCurrentDate(cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH), cal.get(Calendar.HOUR_OF_DAY), cal.get(Calendar.MINUTE)); - } + }//实现函数功能——设置当前的时间,参数是date /** * Set the current date @@ -263,19 +284,20 @@ public class DateTimePicker extends FrameLayout { * @param minute The current minute */ public void setCurrentDate(int year, int month, - int dayOfMonth, int hourOfDay, int minute) { + int dayOfMonth, int hourOfDay, int minute) { setCurrentYear(year); setCurrentMonth(month); setCurrentDay(dayOfMonth); setCurrentHour(hourOfDay); setCurrentMinute(minute); - } + }//实现函数功能——设置当前的时间,参数是各详细的变量 /** * Get current year * * @return The current year */ + //下面是得到year、month、day等值 public int getCurrentYear() { return mDate.get(Calendar.YEAR); } @@ -446,7 +468,7 @@ public class DateTimePicker extends FrameLayout { mDateSpinner.setDisplayedValues(mDateDisplayValues); mDateSpinner.setValue(DAYS_IN_ALL_WEEK / 2); mDateSpinner.invalidate(); - } + }// 对于星期几的算法 private void updateAmPmControl() { if (mIs24HourView) { @@ -455,7 +477,7 @@ public class DateTimePicker extends FrameLayout { int index = mIsAm ? Calendar.AM : Calendar.PM; mAmPmSpinner.setValue(index); mAmPmSpinner.setVisibility(View.VISIBLE); - } + }// 对于上下午操作的算法 } private void updateHourControl() { @@ -465,7 +487,7 @@ public class DateTimePicker extends FrameLayout { } else { mHourSpinner.setMinValue(HOUR_SPINNER_MIN_VAL_12_HOUR_VIEW); mHourSpinner.setMaxValue(HOUR_SPINNER_MAX_VAL_12_HOUR_VIEW); - } + }// 对与小时的算法 } /** diff --git a/app/src/main/java/net/micode/notes/ui/DateTimePickerDialog.java b/app/src/main/java/net/micode/notes/ui/DateTimePickerDialog.java index 2c47ba4..0bf2f00 100644 --- a/app/src/main/java/net/micode/notes/ui/DateTimePickerDialog.java +++ b/app/src/main/java/net/micode/notes/ui/DateTimePickerDialog.java @@ -32,35 +32,47 @@ import android.text.format.DateUtils; public class DateTimePickerDialog extends AlertDialog implements OnClickListener { private Calendar mDate = Calendar.getInstance(); + //创建一个Calendar类型的变量 mDate,方便时间的操作 private boolean mIs24HourView; private OnDateTimeSetListener mOnDateTimeSetListener; + //声明一个时间日期滚动选择控件 mOnDateTimeSetListener private DateTimePicker mDateTimePicker; + //DateTimePicker控件,控件一般用于让用户可以从日期列表中选择单个值。 + //运行时,单击控件边上的下拉箭头,会显示为两个部分:一个下拉列表,一个用于选择日期的 public interface OnDateTimeSetListener { void OnDateTimeSet(AlertDialog dialog, long date); } public DateTimePickerDialog(Context context, long date) { + //对该界面对话框的实例化 super(context); + //对数据库的操作 mDateTimePicker = new DateTimePicker(context); setView(mDateTimePicker); + //添加一个子视图 mDateTimePicker.setOnDateTimeChangedListener(new OnDateTimeChangedListener() { public void onDateTimeChanged(DateTimePicker view, int year, int month, - int dayOfMonth, int hourOfDay, int minute) { + int dayOfMonth, int hourOfDay, int minute) { 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); + //将秒数设置为0 mDateTimePicker.setCurrentDate(mDate.getTimeInMillis()); setButton(context.getString(R.string.datetime_dialog_ok), this); setButton2(context.getString(R.string.datetime_dialog_cancel), (OnClickListener)null); + //设置按钮 set24HourView(DateFormat.is24HourFormat(this.getContext())); + //时间标准化打印 updateTitle(mDate.getTimeInMillis()); } @@ -70,21 +82,22 @@ public class DateTimePickerDialog extends AlertDialog implements OnClickListener 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; + DateUtils.FORMAT_SHOW_YEAR | + DateUtils.FORMAT_SHOW_DATE | + DateUtils.FORMAT_SHOW_TIME; flag |= mIs24HourView ? DateUtils.FORMAT_24HOUR : DateUtils.FORMAT_24HOUR; setTitle(DateUtils.formatDateTime(this.getContext(), date, flag)); - } + }//android开发中常见日期管理工具类(API)——DateUtils:按照上下午显示时间 public void onClick(DialogInterface arg0, int arg1) { if (mOnDateTimeSetListener != null) { mOnDateTimeSetListener.OnDateTimeSet(this, mDate.getTimeInMillis()); } - } + }//第一个参数arg0是接收到点击事件的对话框 + //第二个参数arg1是该对话框上的按钮 } \ No newline at end of file diff --git a/app/src/main/java/net/micode/notes/ui/DropdownMenu.java b/app/src/main/java/net/micode/notes/ui/DropdownMenu.java index 613dc74..3e7386c 100644 --- a/app/src/main/java/net/micode/notes/ui/DropdownMenu.java +++ b/app/src/main/java/net/micode/notes/ui/DropdownMenu.java @@ -30,14 +30,18 @@ import net.micode.notes.R; public class DropdownMenu { private Button mButton; private PopupMenu mPopupMenu; + //声明一个下拉菜单 private Menu mMenu; public DropdownMenu(Context context, Button button, int menuId) { mButton = button; mButton.setBackgroundResource(R.drawable.dropdown_icon); + //设置这个view的背景 mPopupMenu = new PopupMenu(context, mButton); mMenu = mPopupMenu.getMenu(); mPopupMenu.getMenuInflater().inflate(menuId, mMenu); + //MenuInflater是用来实例化Menu目录下的Menu布局文件 + //根据ID来确认menu的内容选项 mButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { mPopupMenu.show(); @@ -48,14 +52,14 @@ public class DropdownMenu { public void setOnDropdownMenuItemClickListener(OnMenuItemClickListener listener) { if (mPopupMenu != null) { mPopupMenu.setOnMenuItemClickListener(listener); - } + }//设置菜单的监听 } public MenuItem findItem(int id) { return mMenu.findItem(id); - } + }//对于菜单选项的初始化,根据索引搜索菜单需要的选项 public void setTitle(CharSequence title) { mButton.setText(title); - } + }//布局文件,设置标题 } diff --git a/app/src/main/java/net/micode/notes/ui/FoldersListAdapter.java b/app/src/main/java/net/micode/notes/ui/FoldersListAdapter.java index 96b77da..dfb5f8f 100644 --- a/app/src/main/java/net/micode/notes/ui/FoldersListAdapter.java +++ b/app/src/main/java/net/micode/notes/ui/FoldersListAdapter.java @@ -30,10 +30,14 @@ import net.micode.notes.data.Notes.NoteColumns; public class FoldersListAdapter extends CursorAdapter { + //CursorAdapter是Cursor和ListView的接口 + //FoldersListAdapter继承了CursorAdapter的类 + //主要作用是便签数据库和用户的交互 + //这里就是用folder(文件夹)的形式展现给用户 public static final String [] PROJECTION = { - NoteColumns.ID, - NoteColumns.SNIPPET - }; + NoteColumns.ID, + NoteColumns.SNIPPET + };//调用数据库中便签的ID和片段 public static final int ID_COLUMN = 0; public static final int NAME_COLUMN = 1; @@ -41,12 +45,13 @@ public class FoldersListAdapter extends CursorAdapter { public FoldersListAdapter(Context context, Cursor c) { super(context, c); // TODO Auto-generated constructor stub - } + }//数据库操作 @Override public View newView(Context context, Cursor cursor, ViewGroup parent) { + //ViewGroup是容器 return new FolderListItem(context); - } + }//创建一个文件夹,对于各文件夹中子标签的初始化 @Override public void bindView(View view, Context context, Cursor cursor) { @@ -55,20 +60,22 @@ public class FoldersListAdapter extends CursorAdapter { .getString(R.string.menu_move_parent_folder) : cursor.getString(NAME_COLUMN); ((FolderListItem) view).bind(folderName); } - } + }//将各个布局文件绑定起来 public String getFolderName(Context context, int position) { Cursor cursor = (Cursor) getItem(position); return (cursor.getLong(ID_COLUMN) == Notes.ID_ROOT_FOLDER) ? context .getString(R.string.menu_move_parent_folder) : cursor.getString(NAME_COLUMN); - } + }//根据数据库中标签的ID得到标签的各项内容 private class FolderListItem extends LinearLayout { private TextView mName; public FolderListItem(Context context) { super(context); + //操作数据库 inflate(context, R.layout.folder_list_item, this); + //根据布局文件的名字等信息将其找出来 mName = (TextView) findViewById(R.id.tv_folder_name); } diff --git a/项目文档.docx b/项目文档.docx new file mode 100644 index 0000000000000000000000000000000000000000..53f64293039f4443be621297a6d6acdd97775f2c GIT binary patch literal 29481 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 E0px!)1poj5 literal 0 HcmV?d00001