diff --git a/Src/app/src/main/java/net/micode/notes/model/Note.java b/Src/app/src/main/java/net/micode/notes/model/Note.java
index d9cf8c3..c01969c 100644
--- a/Src/app/src/main/java/net/micode/notes/model/Note.java
+++ b/Src/app/src/main/java/net/micode/notes/model/Note.java
@@ -376,5 +376,6 @@ public class Note {
return null;
}
}
+
}
diff --git a/Src/app/src/main/java/net/micode/notes/model/WorkingNote.java b/Src/app/src/main/java/net/micode/notes/model/WorkingNote.java
index c418512..cd4875a 100644
--- a/Src/app/src/main/java/net/micode/notes/model/WorkingNote.java
+++ b/Src/app/src/main/java/net/micode/notes/model/WorkingNote.java
@@ -346,6 +346,7 @@ public class WorkingNote {
}
}
+
// 将当前笔记内容同步到数据库
mNote.syncNote(mContext, mNoteId);
@@ -795,11 +796,11 @@ public class WorkingNote {
mNote.setNoteValue(NoteColumns.GESTURE_PASSWORD, mGesturePassword);
}
}
- // 添加方法,将 HTML 格式的内容保存到数据库
- public void setRichTextContent(String htmlContent) {
- if (!TextUtils.equals(mContent, htmlContent)) {
- mContent = htmlContent;
- mNote.setTextData(DataColumns.CONTENT, mContent); // 保存 HTML 格式的内容
+ public void setRichTextContent(String content) {
+ if (!TextUtils.equals(mContent, content)) {
+ mContent = content;
+ // 添加保存到数据库的逻辑
+ mNote.setTextData(DataColumns.CONTENT, mContent);
}
}
// 从数据库加载富文本内容
diff --git a/Src/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java b/Src/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java
index 3046795..739a82e 100644
--- a/Src/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java
+++ b/Src/app/src/main/java/net/micode/notes/ui/NoteEditActivity.java
@@ -313,7 +313,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}
});
// 初始化富文本编辑器
- mNoteEditor = (RichEditText) findViewById(R.id.note_edit_view);
+ mNoteEditor = findViewById(R.id.note_edit_view);
mToolbar = findViewById(R.id.toolbar); // 工具栏布局
// 工具栏始终可见
mToolbar.setVisibility(View.VISIBLE);
@@ -338,15 +338,6 @@ public class NoteEditActivity extends Activity implements OnClickListener,
mNoteEditor.toggleUnderline();
});
- // 删除线按钮
- findViewById(R.id.btn_strikethrough).setOnClickListener(v -> {
- mNoteEditor.toggleStrikethrough();
- });
-
- // 项目符号按钮
- findViewById(R.id.btn_bullet).setOnClickListener(v -> {
- mNoteEditor.toggleBullet();
- });
// 文字颜色按钮
findViewById(R.id.btn_text_color).setOnClickListener(v -> {
@@ -354,9 +345,10 @@ public class NoteEditActivity extends Activity implements OnClickListener,
});
}
private void showColorPicker() {
- new ColorPickerDialog(this, color -> {
- mNoteEditor.setTextColor(color);
- }).show();
+ ColorPickerDialog colorPickerDialog = new ColorPickerDialog(this, color -> {
+ mNoteEditor.setTextColor(color); // 设置所选颜色
+ });
+ colorPickerDialog.show();
}
private void copyAssetsFolder(String assetDir, File outDir) throws IOException {
@@ -521,9 +513,9 @@ public class NoteEditActivity extends Activity implements OnClickListener,
checkNotePassword(mWorkingNote.getNoteId());
}
// 加载富文本内容
- String htmlContent = mWorkingNote.getRichTextContent(); // 从 WorkingNote 加载 HTML 内容
- if (!TextUtils.isEmpty(htmlContent)) {
- mNoteEditor.fromHtml(htmlContent); // 加载到编辑器
+ String spannableContent = mWorkingNote.getRichTextContent(); // 从 WorkingNote 加载 Spannable 内容
+ if (!TextUtils.isEmpty(spannableContent)) {
+ mNoteEditor.fromSpannableString(spannableContent); // 加载到编辑器
}
// 初始化笔记界面
initNoteScreen();
@@ -761,8 +753,8 @@ public class NoteEditActivity extends Activity implements OnClickListener,
@Override
protected void onPause() {
super.onPause();
- String htmlContent = mNoteEditor.toHtml(); // 将富文本内容转换为 HTML
- mWorkingNote.setRichTextContent(htmlContent); // 保存到 WorkingNote
+ // 保存内容
+ mWorkingNote.setRichTextContent(mNoteEditor.toSpannableString());
// 保存笔记数据
if (saveNote()) {
Log.d(TAG, "Note data was saved with length:" + mWorkingNote.getContent().length());
@@ -1080,7 +1072,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
if (mWorkingNote.getNoteId() > 0) {
Intent intent = new Intent(this, AlarmReceiver.class);
intent.setData(ContentUris.withAppendedId(Notes.CONTENT_NOTE_URI, mWorkingNote.getNoteId()));
- PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_IMMUTABLE);
AlarmManager alarmManager = ((AlarmManager) getSystemService(ALARM_SERVICE));
showAlertHeader();
if (!set) {
@@ -1311,12 +1303,12 @@ public class NoteEditActivity extends Activity implements OnClickListener,
*/
private boolean getWorkingText() {
if (mNoteEditor.getVisibility() == View.VISIBLE) {
- // 获取编辑器中的 HTML 格式内容
- String htmlContent = mNoteEditor.toHtml();
+ // 获取编辑器中的 Spannable 内容
+ String spannableContent = mNoteEditor.toSpannableString(); // 使用 toSpannableString 方法获取内容
- if (htmlContent != null) {
+ if (!TextUtils.isEmpty(spannableContent)) {
// 设置到 WorkingNote 中
- mWorkingNote.setRichTextContent(htmlContent);
+ mWorkingNote.setRichTextContent(spannableContent);
return true; // 成功获取内容
} else {
return false; // 获取内容失败
@@ -1352,11 +1344,13 @@ public class NoteEditActivity extends Activity implements OnClickListener,
* @return 是否成功保存笔记。
*/
private boolean saveNote() {
- getWorkingText();
+ String spannableContent = mNoteEditor.toSpannableString();
+ Log.d(TAG, "Saving content: " + spannableContent); // 检查内容
+ mWorkingNote.setRichTextContent(spannableContent);
boolean saved = mWorkingNote.saveNote();
+ Log.d(TAG, "Save operation result: " + saved); // 检查保存结果
if (saved) {
- // 设置结果为成功,以便外部调用者知道保存操作的状态
setResult(RESULT_OK);
}
return saved;
@@ -1639,8 +1633,8 @@ public class NoteEditActivity extends Activity implements OnClickListener,
mWorkingNote.deleteImagePathFromDatabase();
// 更新富文本内容到数据库
- String htmlContent = mNoteEditor.toHtml();
- mWorkingNote.setRichTextContent(htmlContent);
+ String spannableContent = mNoteEditor.toSpannableString(); // 使用 toSpannableString 方法获取内容
+ mWorkingNote.setRichTextContent(spannableContent); // 保存到WorkingNote
mWorkingNote.saveNote();
// 提示用户删除成功
diff --git a/Src/app/src/main/java/net/micode/notes/ui/RichEditText.java b/Src/app/src/main/java/net/micode/notes/ui/RichEditText.java
index ef97ffb..bc64d57 100644
--- a/Src/app/src/main/java/net/micode/notes/ui/RichEditText.java
+++ b/Src/app/src/main/java/net/micode/notes/ui/RichEditText.java
@@ -2,33 +2,20 @@ package net.micode.notes.ui;
import android.content.Context;
import android.graphics.Color;
+import android.graphics.Typeface;
import android.text.Editable;
import android.text.Layout;
import android.text.Spannable;
+import android.text.SpannableString;
import android.text.SpannableStringBuilder;
-import android.text.style.BackgroundColorSpan;
-import android.text.style.BulletSpan;
import android.text.style.ForegroundColorSpan;
-import android.text.style.StrikethroughSpan;
import android.text.style.StyleSpan;
import android.text.style.UnderlineSpan;
import android.util.AttributeSet;
-
-import android.graphics.Typeface;
import android.widget.EditText;
public class RichEditText extends EditText {
- @Override
- protected void onFinishInflate() {
- super.onFinishInflate();
-
- // 确保在初始化时,内容为空,避免默认插入图片或其他格式化内容
- if (getText() == null || getText().length() == 0) {
- setText(""); // 初始化为空文本
- }
- }
-
public RichEditText(Context context) {
super(context);
}
@@ -52,13 +39,22 @@ public class RichEditText extends EditText {
public void toggleUnderline() {
toggleSpan(new UnderlineSpan());
}
+ public int[] getCursorCoordinates() {
+ int[] location = new int[2];
+ getLocationOnScreen(location); // 获取 `RichEditText` 在屏幕上的位置
- public void toggleStrikethrough() {
- toggleSpan(new StrikethroughSpan());
- }
+ int cursorPosition = getSelectionStart();
+ Layout layout = getLayout();
+ if (layout != null) {
+ int line = layout.getLineForOffset(cursorPosition);
+ int baseline = layout.getLineBaseline(line);
- public void toggleBullet() {
- toggleSpan(new BulletSpan(20, Color.BLACK));
+ int x = (int) layout.getPrimaryHorizontal(cursorPosition) + location[0];
+ int y = baseline + layout.getLineTop(line) + location[1];
+
+ return new int[]{x, y};
+ }
+ return location; // 如果布局未加载,返回编辑器位置
}
public void setTextColor(int color) {
@@ -73,11 +69,18 @@ public class RichEditText extends EditText {
editable.removeSpan(span);
}
- editable.setSpan(new ForegroundColorSpan(color), start, end,
- Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+ editable.setSpan(new ForegroundColorSpan(color), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
+ public String toSpannableString() {
+ return getText().toString(); // 直接返回文本
+ }
+
+ public void fromSpannableString(String text) {
+ setText(text); // 设置文本
+ }
+
private void toggleStyle(int style) {
int start = getSelectionStart();
int end = getSelectionEnd();
@@ -95,8 +98,7 @@ public class RichEditText extends EditText {
}
if (!hasStyle) {
- editable.setSpan(new StyleSpan(style), start, end,
- Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
+ editable.setSpan(new StyleSpan(style), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
@@ -119,50 +121,4 @@ public class RichEditText extends EditText {
}
}
}
- public int[] getCursorCoordinates() {
- int[] location = new int[2];
- getLocationOnScreen(location); // 获取 `RichEditText` 在屏幕上的位置
-
- int cursorPosition = getSelectionStart();
- Layout layout = getLayout();
- if (layout != null) {
- int line = layout.getLineForOffset(cursorPosition);
- int baseline = layout.getLineBaseline(line);
-
- int x = (int) layout.getPrimaryHorizontal(cursorPosition) + location[0];
- int y = baseline + layout.getLineTop(line) + location[1];
-
- return new int[]{x, y};
- }
- return location; // 如果布局未加载,返回编辑器位置
- }
- // 将富文本转换为HTML
- public String toHtml() {
- Editable text = getText();
- if (text == null || text.length() == 0) {
- return ""; // 如果内容为空,返回空字符串
- }
-
- // 使用 HtmlCompat 工具确保兼容性
- String htmlContent = android.text.Html.toHtml(text);
- return htmlContent
- .replaceAll("", "") // 去除段落标签
- .replaceAll("
", "")
- .replaceAll(" ", " ") // 替换无意义的空格
- .trim();
- }
-
- // 从HTML加载富文本
- public void fromHtml(String html) {
- if (html == null || html.isEmpty()) {
- setText(""); // 如果 HTML 内容为空,设置为空字符串
- return;
- }
-
- // 使用 HtmlCompat 工具解析 HTML,兼容中文和样式
- setText(android.text.Html.fromHtml(html));
- }
-
-
-
}
\ No newline at end of file
diff --git a/Src/app/src/main/res/layout/note_edit.xml b/Src/app/src/main/res/layout/note_edit.xml
index 52de982..e2ab7a8 100644
--- a/Src/app/src/main/res/layout/note_edit.xml
+++ b/Src/app/src/main/res/layout/note_edit.xml
@@ -116,24 +116,6 @@
android:contentDescription="@string/format_underline"
android:src="@drawable/ic_format_underline" />
-
-
-
-
-
-