适配居中显示文字的渐隐文字颜色
This commit is contained in:
@ -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());
|
||||
|
||||
Reference in New Issue
Block a user