修复ExpendTextView收缩状态无法显示Span样式问题

This commit is contained in:
kehaoyuan
2019-06-26 11:23:03 +08:00
parent c499c19e5b
commit e7a594003f
2 changed files with 36 additions and 21 deletions

View File

@ -1,11 +1,13 @@
package com.gh.common.view;
import android.content.Context;
import android.graphics.Color;
import android.os.Build;
import android.text.Layout;
import android.text.SpannableStringBuilder;
import android.text.Spanned;
import android.text.TextPaint;
import android.text.style.BackgroundColorSpan;
import android.text.style.ClickableSpan;
import android.util.AttributeSet;
import android.view.View;
@ -19,6 +21,7 @@ import androidx.core.content.ContextCompat;
public class ExpendTextView extends AppCompatTextView {
private CharSequence mSnapshotText;
private CharSequence mCloseText;
private String mExpendText = "...全文";
@ -45,6 +48,7 @@ public class ExpendTextView extends AppCompatTextView {
super.onLayout(changed, left, top, right, bottom);
if (mInitLayout && !mOpenLayout && getLineCount() > mMaxLines) {
mSnapshotText = getText();
mCloseText = getText();
mInitLayout = false;
showExpendButton();
}
@ -89,30 +93,39 @@ public class ExpendTextView extends AppCompatTextView {
}
}
}
SpannableStringBuilder msp = new SpannableStringBuilder(content);
SpannableStringBuilder msp = new SpannableStringBuilder(mCloseText);
int length = msp.length();
int startPosition = length - mExpendText.length();
int startPosition = content.length() - mExpendText.length();
startPosition = startPosition < 0 ? 0 : startPosition;
msp.replace(startPosition, length, mExpendText);
msp.setSpan(new ClickableSpan() {
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(ContextCompat.getColor(getContext(), R.color.theme));
ds.setUnderlineText(false);
}
msp.setSpan(
new ClickableSpan() {
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setColor(ContextCompat.getColor(getContext(), R.color.theme));
ds.setUnderlineText(false);
}
@Override
public void onClick(View widget) {
mOpenLayout = true;
setMaxLines(Integer.MAX_VALUE);
setText(mSnapshotText);
@Override
public void onClick(View widget) {
mOpenLayout = true;
setMaxLines(Integer.MAX_VALUE);
setText(mSnapshotText);
if (mExpandCallback != null) {
mExpandCallback.onExpand();
}
}
}, startPosition, length, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
if (mExpandCallback != null) {
mExpandCallback.onExpand();
}
}
},
startPosition,
msp.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
msp.setSpan(
new BackgroundColorSpan(Color.WHITE),
startPosition,
msp.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
setText(msp);
setMovementMethod(CustomLinkMovementMethod.getInstance());