From 294b9c7bfa9e7672aba6de2e7f677bdfe417ba70 Mon Sep 17 00:00:00 2001 From: "da.que" Date: Wed, 12 Dec 2018 11:52:12 +0800 Subject: [PATCH] bugfix: https://issuetracker.google.com/issues/113348914 --- .../qmui/link/QMUILinkTouchDecorHelper.java | 32 +++++++++++++------ 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/qmui/src/main/java/com/qmuiteam/qmui/link/QMUILinkTouchDecorHelper.java b/qmui/src/main/java/com/qmuiteam/qmui/link/QMUILinkTouchDecorHelper.java index 3d0469a6..28e8d55e 100644 --- a/qmui/src/main/java/com/qmuiteam/qmui/link/QMUILinkTouchDecorHelper.java +++ b/qmui/src/main/java/com/qmuiteam/qmui/link/QMUILinkTouchDecorHelper.java @@ -19,9 +19,11 @@ package com.qmuiteam.qmui.link; import android.text.Layout; import android.text.Selection; import android.text.Spannable; +import android.util.Log; import android.view.MotionEvent; import android.widget.TextView; +import com.qmuiteam.qmui.BuildConfig; import com.qmuiteam.qmui.widget.textview.ISpanTouchFix; /** @@ -98,17 +100,27 @@ public class QMUILinkTouchDecorHelper { Layout layout = textView.getLayout(); int line = layout.getLineForVertical(y); - int off = layout.getOffsetForHorizontal(line, x); - if (x < layout.getLineLeft(line) || x > layout.getLineRight(line)) { - // 实际上没点到任何内容 - off = -1; - } - ITouchableSpan[] link = spannable.getSpans(off, off, ITouchableSpan.class); - ITouchableSpan touchedSpan = null; - if (link.length > 0) { - touchedSpan = link[0]; + /* + * BugFix: https://issuetracker.google.com/issues/113348914 + */ + try { + int off = layout.getOffsetForHorizontal(line, x); + if (x < layout.getLineLeft(line) || x > layout.getLineRight(line)) { + // 实际上没点到任何内容 + off = -1; + } + ITouchableSpan[] link = spannable.getSpans(off, off, ITouchableSpan.class); + ITouchableSpan touchedSpan = null; + if (link.length > 0) { + touchedSpan = link[0]; + } + return touchedSpan; + } catch (IndexOutOfBoundsException e) { + if (BuildConfig.DEBUG) { + Log.d(this.toString(), "getPressedSpan", e); + } } - return touchedSpan; + return null; } }