public class RichTextUtils { public static <A extends CharacterStyle, B extends CharacterStyle> Spannable replaceAll(Spanned original, Class<A> sourceType, SpanConverter<A, B> converter) { SpannableString result=new SpannableString(original); A[] spans=result.getSpans(0, result.length(), sourceType); for (A span : spans) { int start=result.getSpanStart(span); int end=result.getSpanEnd(span); int flags=result.getSpanFlags(span); result.removeSpan(span); result.setSpan(converter.convert(span), start, end, flags); } return(result); } public interface SpanConverter<A extends CharacterStyle, B extends CharacterStyle> { B convert(A span); } }
protected void buildPreSpans(SpannableStringBuilder mOriginBuilder) { if (mOriginalText instanceof SpannableString) { Object[] spans = ((SpannableString) mOriginalText).getSpans(0, mOriginalText.length(), Object.class); if (spans.length > 0) { for (Object span : spans) { try { int spanStart = ((SpannableString) mOriginalText).getSpanStart(span); int spanEnd = ((SpannableString) mOriginalText).getSpanEnd(span); int spanFlags = ((SpannableString) mOriginalText).getSpanFlags(span); mOriginBuilder.setSpan(span, spanStart + labelLength, spanEnd + labelLength, spanFlags); } catch (Exception e) { //ignore } } } } }
private CharSequence prepareFormat(Spannable s) { SpannableString ret = new SpannableString(s.toString()); for (Object span : s.getSpans(0, s.length(), CharacterStyle.class)) { if ((ret.getSpanFlags(span) & Spannable.SPAN_COMPOSING) != 0) continue; ret.setSpan(span, s.getSpanStart(span), s.getSpanEnd(span), s.getSpanFlags(span) & Spanned.SPAN_PRIORITY); } return ret; }
public static Spannable createClickableSpans(Spanned original, ClickSpan.OnClickListener listener) { SpannableString result = new SpannableString(original); URLSpan[] spans = result.getSpans(0, result.length(), URLSpan.class); for (URLSpan span : spans) { int start = result.getSpanStart(span); int end = result.getSpanEnd(span); int flags = result.getSpanFlags(span); result.removeSpan(span); result.setSpan(new ClickSpan(span.getURL(), listener), start, end, flags); } return result; }
private CharSequence fixSpanColor(CharSequence text) { if (text instanceof Spanned) { final SpannableString s = new SpannableString(text); final ForegroundColorSpan[] spans = s.getSpans(0, s.length(), ForegroundColorSpan.class); for (final ForegroundColorSpan oldSpan : spans) { final ForegroundColorSpan newSpan = new ForegroundColorSpan(oldSpan.getForegroundColor() | 0xFF000000); s.setSpan(newSpan, s.getSpanStart(oldSpan), s.getSpanEnd(oldSpan), s.getSpanFlags(oldSpan)); s.removeSpan(oldSpan); } return s; } else { return text; } }
private static CharSequence fixSpanColor(CharSequence text) { if (text instanceof Spanned) { final SpannableString s = new SpannableString(text); final ForegroundColorSpan[] spans = s.getSpans(0, s.length(), ForegroundColorSpan.class); for (final ForegroundColorSpan oldSpan : spans) { final ForegroundColorSpan newSpan = new ForegroundColorSpan(oldSpan.getForegroundColor() | 0xFF000000); s.setSpan(newSpan, s.getSpanStart(oldSpan), s.getSpanEnd(oldSpan), s.getSpanFlags(oldSpan)); s.removeSpan(oldSpan); } return s; } else { return text; } } }
public static <A extends CharacterStyle, B extends CharacterStyle> Spannable replaceAll(Spanned original, Class<A> sourceType, SpanConverter<A, B> converter) { SpannableString result=new SpannableString(original); A[] spans=result.getSpans(0, result.length(), sourceType); for (A span : spans) { int start=result.getSpanStart(span); int end=result.getSpanEnd(span); int flags=result.getSpanFlags(span); result.removeSpan(span); result.setSpan(converter.convert(span), start, end, flags); } return(result); }
committedWordWithSuggestionSpans.getSpanFlags(span));