From 5301c396d84aad415dc21abd2df125fa55047b51 Mon Sep 17 00:00:00 2001 From: gq <15933486098@qq.com> Date: Thu, 15 May 2025 08:06:31 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E7=9A=84=E5=A4=84=E7=90=86?= =?UTF-8?q?=E8=A7=A6=E6=91=B8=E4=BA=8B=E4=BB=B6=E5=B9=B6=E8=BF=9B=E8=A1=8C?= =?UTF-8?q?=E6=96=87=E6=9C=AC=E9=80=89=E6=8B=A9=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../net/micode/notes/ui/NoteEditText.java | 31 +++++++++++++++---- 1 file changed, 25 insertions(+), 6 deletions(-) diff --git a/Notesmaster/app/src/main/java/net/micode/notes/ui/NoteEditText.java b/Notesmaster/app/src/main/java/net/micode/notes/ui/NoteEditText.java index 52fd50d..ded9ddb 100644 --- a/Notesmaster/app/src/main/java/net/micode/notes/ui/NoteEditText.java +++ b/Notesmaster/app/src/main/java/net/micode/notes/ui/NoteEditText.java @@ -100,25 +100,44 @@ public class NoteEditText extends EditText { // TODO Auto-generated constructor stub } + /** + * 处理触摸事件,实现文本选择功能 + * + * @param event 触摸事件对象,包含触摸位置等信息 + * @return 返回true表示已处理该事件,false表示未处理 + */ @Override public boolean onTouchEvent(MotionEvent event) { switch (event.getAction()) { - case MotionEvent.ACTION_DOWN: - + case MotionEvent.ACTION_DOWN: // 手指按下屏幕事件 + // 1. 获取触摸点的原始坐标 int x = (int) event.getX(); int y = (int) event.getY(); - x -= getTotalPaddingLeft(); - y -= getTotalPaddingTop(); - x += getScrollX(); - y += getScrollY(); + // 2. 调整坐标,去除内边距的影响 + x -= getTotalPaddingLeft(); // 减去左侧内边距 + y -= getTotalPaddingTop(); // 减去顶部内边距 + + // 3. 考虑滚动偏移量 + x += getScrollX(); // 加上水平滚动距离 + y += getScrollY(); // 加上垂直滚动距离 + + // 4. 获取文本布局对象 Layout layout = getLayout(); + + // 5. 根据y坐标获取行号 int line = layout.getLineForVertical(y); + + // 6. 根据x坐标获取该行内的字符偏移量 int off = layout.getOffsetForHorizontal(line, x); + + // 7. 设置文本选择位置 Selection.setSelection(getText(), off); + break; } + // 调用父类方法处理其他触摸事件(如移动、抬起等) return super.onTouchEvent(event); }