diff --git a/app/src/main/java/com/gh/common/view/ExpandTextView.java b/app/src/main/java/com/gh/common/view/ExpandTextView.java index e29025db47..78232f2781 100644 --- a/app/src/main/java/com/gh/common/view/ExpandTextView.java +++ b/app/src/main/java/com/gh/common/view/ExpandTextView.java @@ -180,14 +180,14 @@ public class ExpandTextView extends AppCompatTextView { SpannableStringBuilder msp = new SpannableStringBuilder(mSnapshotText); int length = msp.length(); - int startPosition; - startPosition = content.length() - finalEndText.length() - mExpandText.length(); - startPosition = Math.max(startPosition, 0); + int expandTextStartPosition; + expandTextStartPosition = content.length() - finalEndText.length() - mExpandText.length(); + expandTextStartPosition = Math.max(expandTextStartPosition, 0); // 避免越界 - if (startPosition >= length) return; + if (expandTextStartPosition >= length) return; - msp.replace(startPosition, length, finalEndText + mExpandText); + msp.replace(expandTextStartPosition, length, finalEndText + mExpandText); msp.setSpan(new ClickableSpan() { @Override @@ -211,24 +211,29 @@ public class ExpandTextView extends AppCompatTextView { mExpandCallback.onExpand(); } } - }, startPosition + mEndText.length(), msp.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + }, expandTextStartPosition + mEndText.length(), msp.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); int paintColor = 0; - // 找到最后一个 ForegroundSpan 并获取颜色给 GradientAlphaTextSpan - Object[] objects = msp.getSpans(0, startPosition, Object.class); + // 找到第一个位置与 endTextStartPosition 贴合的 ForegroundSpan / ClickableSpan , + // 获取颜色赋值给 GradientAlphaTextSpan + Object[] objects = msp.getSpans(0, expandTextStartPosition, Object.class); if (objects.length != 0) { - Object span = objects[objects.length - 1]; - int endPosition = msp.getSpanEnd(span); - if (endPosition == startPosition) { - if (span instanceof ForegroundColorSpan) { - paintColor = ((ForegroundColorSpan) span).getForegroundColor(); - } else if (span instanceof ClickableSpan) { - paintColor = getResources().getColor(R.color.theme_font); + for (Object span : objects) { + int startPosition = msp.getSpanStart(span); + int endPosition = msp.getSpanEnd(span); + if (expandTextStartPosition >= startPosition && expandTextStartPosition <= endPosition) { + if (span instanceof ForegroundColorSpan) { + paintColor = ((ForegroundColorSpan) span).getForegroundColor(); + break; + } else if (span instanceof ClickableSpan) { + paintColor = getResources().getColor(R.color.theme_font); + break; + } } } } - msp.setSpan(new GradientAlphaTextSpan(paintColor), startPosition, startPosition + finalEndText.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + msp.setSpan(new GradientAlphaTextSpan(paintColor), expandTextStartPosition, expandTextStartPosition + finalEndText.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); setText(msp); setMovementMethod(CustomLinkMovementMethod.getInstance());