Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Spannable text is too wide for TextView

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));
    }
}

text get's cut off on the right edge

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?

like image 409
Matthias Robbers Avatar asked Jul 15 '15 21:07

Matthias Robbers


1 Answers

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.

like image 158
Matthias Robbers Avatar answered Sep 27 '22 18:09

Matthias Robbers