From 6e883216eab955c5766ea45d2cd3c60a06baa534 Mon Sep 17 00:00:00 2001
From: xuningshuo <2105361900@qq.com>
Date: Tue, 27 Jan 2026 00:55:52 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E4=BA=86=E9=A1=B5=E8=BE=B9?=
=?UTF-8?q?=E8=B7=9D=E4=BD=BF=E5=BE=97ui=E4=B8=8D=E4=BC=9A=E9=81=AE?=
=?UTF-8?q?=E6=8C=A1=E7=AC=AC=E4=B8=80=E8=A1=8C=E6=96=87=E5=AD=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
res/layout/note_edit.xml | 8 +++--
res/layout/note_edit_list_item.xml | 3 +-
src/ui/NoteEditActivity.java | 11 ++++---
src/ui/NoteEditText.java | 50 +++++++++++++++++-------------
4 files changed, 43 insertions(+), 29 deletions(-)
diff --git a/res/layout/note_edit.xml b/res/layout/note_edit.xml
index 10b2aa7..a8b58b6 100644
--- a/res/layout/note_edit.xml
+++ b/res/layout/note_edit.xml
@@ -81,7 +81,9 @@
android:scrollbars="none"
android:overScrollMode="never"
android:layout_gravity="left|top"
- android:fadingEdgeLength="0dip">
+ android:fadingEdgeLength="0dip"
+ android:paddingTop="24dip"
+ android:clipToPadding="false">
+ android:lineSpacingMultiplier="1.2"
+ android:paddingTop="12dip"
+ android:scrollHorizontally="false" />
+ android:background="@null"
+ android:scrollHorizontally="false" />
diff --git a/src/ui/NoteEditActivity.java b/src/ui/NoteEditActivity.java
index 0faa62e..6dc52b0 100644
--- a/src/ui/NoteEditActivity.java
+++ b/src/ui/NoteEditActivity.java
@@ -30,7 +30,6 @@ import android.view.WindowManager;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
-import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
@@ -45,6 +44,7 @@ import net.micode.notes.tool.DataUtils;
import net.micode.notes.tool.ResourceParser;
import net.micode.notes.tool.ResourceParser.TextAppearanceResources;
import net.micode.notes.ui.DateTimePickerDialog.OnDateTimeSetListener;
+import net.micode.notes.ui.NoteEditText;
import net.micode.notes.ui.NoteEditText.OnTextViewChangeListener;
import net.micode.notes.widget.NoteWidgetProvider_2x;
import net.micode.notes.widget.NoteWidgetProvider_4x;
@@ -118,7 +118,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
//私有化一个界面操作mNoteBgColorSelector,对背景颜色的操作
private View mFontSizeSelector;
//私有化一个界面操作mFontSizeSelector,对标签字体的操作
- private EditText mNoteEditor;
+ private NoteEditText mNoteEditor;
//声明编辑控件,对文本操作
private View mNoteEditorPanel;
//私有化一个界面操作mNoteEditorPanel,文本编辑的控制板
@@ -212,7 +212,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
//setSoftInputMode——软键盘输入模式
getWindow().setSoftInputMode(
WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN
- | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
+ | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
} else if(TextUtils.equals(Intent.ACTION_INSERT_OR_EDIT, intent.getAction())) {
// intent.getAction()
// 大多用于broadcast发送广播时给机制(intent)设置一个action,就是一个字符串
@@ -254,7 +254,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
}//创建一个新的WorkingNote
getWindow().setSoftInputMode(
- WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE
+ WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN
| WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
} else {
Log.e(TAG, "Intent not specified action, should not support");
@@ -384,7 +384,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
mNoteHeaderHolder.tvAlertDate = (TextView) findViewById(R.id.tv_alert_date);
mNoteHeaderHolder.ibSetBgColor = (ImageView) findViewById(R.id.btn_set_bg_color);
mNoteHeaderHolder.ibSetBgColor.setOnClickListener(this);
- mNoteEditor = (EditText) findViewById(R.id.note_edit_view);
+ mNoteEditor = (NoteEditText) findViewById(R.id.note_edit_view);
mNoteEditorPanel = findViewById(R.id.sv_note_edit);
mNoteBgColorSelector = findViewById(R.id.note_bg_color_selector);
for (int id : sBgSelectorBtnsMap.keySet()) {
@@ -408,6 +408,7 @@ public class NoteEditActivity extends Activity implements OnClickListener,
mFontSizeId = ResourceParser.BG_DEFAULT_FONT_SIZE;
}
mEditTextList = (LinearLayout) findViewById(R.id.note_edit_list);
+ mNoteEditor.setOnTextViewChangeListener(this);
}
@Override
diff --git a/src/ui/NoteEditText.java b/src/ui/NoteEditText.java
index 0d97949..890ebec 100644
--- a/src/ui/NoteEditText.java
+++ b/src/ui/NoteEditText.java
@@ -95,14 +95,12 @@ public class NoteEditText extends androidx.appcompat.widget.AppCompatEditText {
}
@Override
- //view里的函数,处理手机屏幕的所有事件
- /*参数event为手机屏幕触摸事件封装类的对象,其中封装了该事件的所有信息,
- 例如触摸的位置、触摸的类型以及触摸的时间等。该对象会在用户触摸手机屏幕时被创建。*/
public boolean onTouchEvent(MotionEvent event) {
switch (event.getAction()) {
- //重写了需要处理屏幕被按下的事件
case MotionEvent.ACTION_DOWN:
- //跟新当前坐标值
+ if (isInEditMode()) {
+ break;
+ }
int x = (int) event.getX();
int y = (int) event.getY();
x -= getTotalPaddingLeft();
@@ -110,16 +108,14 @@ public class NoteEditText extends androidx.appcompat.widget.AppCompatEditText {
x += getScrollX();
y += getScrollY();
- //用布局控件layout根据x,y的新值设置新的位置
Layout layout = getLayout();
- int line = layout.getLineForVertical(y);
- int off = layout.getOffsetForHorizontal(line, x);
-
- //更新光标新的位置
- Selection.setSelection(getText(), off);
+ if (layout != null) {
+ int line = layout.getLineForVertical(y);
+ int off = layout.getOffsetForHorizontal(line, x);
+ Selection.setSelection(getText(), off);
+ }
break;
}
-
return super.onTouchEvent(event);
}
@@ -133,8 +129,12 @@ public class NoteEditText extends androidx.appcompat.widget.AppCompatEditText {
//根据按键的 Unicode 编码值来处理
case KeyEvent.KEYCODE_ENTER:
//“进入”按键
+ // 检查是否是输入法的确认操作,如果是则不拦截
if (mOnTextViewChangeListener != null) {
- return false;
+ if ((event.getFlags() & KeyEvent.FLAG_EDITOR_ACTION) == 0 && !isInEditMode()) {
+ // 允许事件正常传递给父类
+ return super.onKeyDown(keyCode, event);
+ }
}
break;
case KeyEvent.KEYCODE_DEL:
@@ -173,14 +173,22 @@ public class NoteEditText extends androidx.appcompat.widget.AppCompatEditText {
case KeyEvent.KEYCODE_ENTER:
//同上也是分为监听器是否建立2种情况
if (mOnTextViewChangeListener != null) {
- int selectionStart = getSelectionStart();
- //获取当前位置
- String text = getText().subSequence(selectionStart, length()).toString();
- //获取当前文本
- setText(getText().subSequence(0, selectionStart));
- //根据获取的文本设置当前文本
- mOnTextViewChangeListener.onEditTextEnter(mIndex + 1, text);
- //当{@link KeyEvent#KEYCODE_ENTER}添加新文本
+ // 检查是否是输入法的确认操作,如果是则不拦截
+ // 同时检查是否有文本输入,避免拦截中文输入法选择候选词的操作
+ if ((event.getFlags() & KeyEvent.FLAG_EDITOR_ACTION) == 0 && !isInEditMode() && event.getAction() == KeyEvent.ACTION_UP) {
+ // 只有当没有输入文本时才执行换行操作
+ if (TextUtils.isEmpty(getText())) {
+ int selectionStart = getSelectionStart();
+ //获取当前位置
+ String text = getText().subSequence(selectionStart, length()).toString();
+ //获取当前文本
+ setText(getText().subSequence(0, selectionStart));
+ //根据获取的文本设置当前文本
+ mOnTextViewChangeListener.onEditTextEnter(mIndex + 1, text);
+ //当{@link KeyEvent#KEYCODE_ENTER}添加新文本
+ return true;
+ }
+ }
} else {
Log.d(TAG, "OnTextViewChangeListener was not seted");
//其他情况报错,文档的改动监听器并没有建立
--
2.34.1