问题
I have a TextView
with the font sans-serif-light
. To link some words inside, I set a text as a Spannable
like this:
final Spannable text = new SpannableString(textView.getText());
final Matcher matcher = PATTERN_TAG.matcher(text);
while (matcher.find()) {
text.setSpan(span, startIndex, endIndex, 0);
}
textView.setText(text);
textView.setMovementMethod(LinkMovementMethod.getInstance());
The Span
that I apply sets the word's font to sans-serif-medium
like this:
public abstract class ClickableTagSpan extends ClickableSpan {
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
ds.setTypeface(Typeface.create("sans-serif-medium", Typeface.NORMAL));
}
}
The problem is that the text becomes too wide for the TextView
in some rows since the width of the medium font is larger than the light font that was orginally set. The TextView
simply cuts off the text on the right edge. How can I get the TextView
to respect the correct width of the text?
回答1:
Solved it by setting an additional TypefaceSpan
, rather than modifying the ClickableSpan
.
text.setSpan(clickableSpan, startIndex, endIndex, 0);
text.setSpan(new TypefaceSpan("sans-serif-medium"), startIndex, endIndex, 0);
This makes the TextView
correctly wrap the text.
来源:https://stackoverflow.com/questions/31441422/spannable-text-is-too-wide-for-textview