public void setPenAttr(CaptionPenAttr penAttr) { mCharacterStyles.clear(); if (penAttr.italic) { mCharacterStyles.add(new StyleSpan(Typeface.ITALIC)); } if (penAttr.underline) { mCharacterStyles.add(new UnderlineSpan()); } switch (penAttr.penSize) { case CaptionPenAttr.PEN_SIZE_SMALL: mCharacterStyles.add(new RelativeSizeSpan(PROPORTION_PEN_SIZE_SMALL)); break; case CaptionPenAttr.PEN_SIZE_LARGE: mCharacterStyles.add(new RelativeSizeSpan(PROPORTION_PEN_SIZE_LARGE)); break; } switch (penAttr.penOffset) { case CaptionPenAttr.OFFSET_SUBSCRIPT: mCharacterStyles.add(new SubscriptSpan()); break; case CaptionPenAttr.OFFSET_SUPERSCRIPT: mCharacterStyles.add(new SuperscriptSpan()); break; } }
@Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.ac_main); Spanned spanned = null; if(Build.VERSION.SDK_INT < Build.VERSION_CODES.N) { spanned = Html.fromHtml(getString(R.string.android_html_text)); } else { spanned = Html.fromHtml(getString(R.string.android_html_text), Html.FROM_HTML_MODE_COMPACT); } SpannableStringBuilder builder = new SpannableStringBuilder(spanned); StyleSpan[] styleSpanArray = builder.getSpans(0, builder.length(), StyleSpan.class); SuperscriptSpan[] superscriptSpanArray = builder.getSpans(0, builder.length(), SuperscriptSpan.class); mCreateTypeface(); mCustomiseStyleSpan(styleSpanArray, builder); mCustomiseScriptSpan(superscriptSpanArray, builder); TextView textView = (TextView)findViewById(R.id.text_view); textView.setTypeface(mRegularTypeface); textView.setText(builder, TextView.BufferType.SPANNABLE); }
private void handleEndTag(CharacterStyle style) { if (style instanceof URLSpan) { mOut.append("</a>"); } else if (style instanceof TypefaceSpan) { mOut.append("</font>"); } else if (style instanceof ForegroundColorSpan) { mOut.append("</font>"); } else if (style instanceof BackgroundColorSpan) { mOut.append("</font>"); } else if (style instanceof AbsoluteSizeSpan) { mOut.append("</font>"); } else if (style instanceof StrikethroughSpan) { mOut.append("</strike>"); } else if (style instanceof SubscriptSpan) { mOut.append("</sub>"); } else if (style instanceof SuperscriptSpan) { mOut.append("</sup>"); } else if (style instanceof UnderlineSpan) { mOut.append("</u>"); } else if (style instanceof BoldSpan) { mOut.append("</b>"); } else if (style instanceof ItalicSpan) { mOut.append("</i>"); } }
private void processSup( boolean opening, Editable output) { int len = output.length(); if(opening) { //output.setSpan(new AbsoluteSizeSpan(scriptSize,false), len, len, Spannable.SPAN_MARK_MARK); //output.setSpan(new RelativeSizeSpan(0.5f), len, len, Spannable.SPAN_MARK_MARK); output.setSpan(new SuperscriptSpan(), len, len, Spannable.SPAN_MARK_MARK); } else { Object obj = getLast(output, SuperscriptSpan.class); int where = output.getSpanStart(obj); output.removeSpan(obj); //obj = getLast(output, RelativeSizeSpan.class); //output.removeSpan(obj); if (where != len&&where>=0) { //output.setSpan(new AbsoluteSizeSpan(scriptSize, false), where, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); output.setSpan(new RelativeSizeSpan(0.7f), where, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); output.setSpan(new SuperscriptSpan(), where, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } //obj = getLast(output, AbsoluteSizeSpan.class); //where = output.getSpanStart(obj); //output.removeSpan(obj); //if (where != len) { // output.setSpan(new AbsoluteSizeSpan(scriptSize, false), where, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // //output.setSpan(new RelativeSizeSpan(0.5f), where, len, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); //} } }
@Override protected void onFinishInflate() { super.onFinishInflate(); ((TextView) findViewById(R.id.item_new).findViewById(R.id.rank)) .append(makeAsteriskSpan()); SpannableString spannable = new SpannableString("+5"); spannable.setSpan(new SuperscriptSpan(), 0, spannable.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannable.setSpan(new RelativeSizeSpan(0.6f), 0, spannable.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannable.setSpan(new ForegroundColorSpan( ContextCompat.getColor(getContext(), R.color.greenA700)), 0, spannable.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); ((TextView) findViewById(R.id.item_promoted).findViewById(R.id.rank)).append(spannable); TextView comments = (TextView) findViewById(R.id.item_new_comments).findViewById(R.id.comment); SpannableStringBuilder sb = new SpannableStringBuilder("46"); sb.append(makeAsteriskSpan()); comments.setText(sb); }
@Test public void superscript_should_add_only_one_span() { spanBuilder.style(range, EZ.SUPERSCRIPT) .apply(); verify((SpanEZ) spanBuilder, times(1)) .addSpan(isA(TargetRange.class), isA(SuperscriptSpan.class)); }
public MIP_TextStyle setSuperscriptSpan(int start, int end) { if (spannableString == null) { return this; } spannableString.setSpan(new SuperscriptSpan(), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); // 设置前景色为洋红色 return this; }
private SpannableStringBuilder ConvertToExponent(String s) { //This Function makes the Normal text into Exponents and base, position being the index of exponent int position = s.indexOf("x") + 1; SpannableStringBuilder builder = new SpannableStringBuilder(s); builder.setSpan(new SuperscriptSpan(), position, position + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); builder.setSpan(new RelativeSizeSpan(0.50f), position, position + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); return builder; }
/** * @see SuperscriptSpan#SuperscriptSpan() */ public static Span superscript() { return new Span(new SpanBuilder() { @Override public Object build() { return new SuperscriptSpan(); } }); }
/** * SuperscriptSpan,设置上标 */ private void superscript () { SpannableString string = new SpannableString("为文字设置下划线"); RelativeSizeSpan sizeSpan = new RelativeSizeSpan(0.7f); string.setSpan(sizeSpan, 5, string.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE); SuperscriptSpan superscriptSpan = new SuperscriptSpan(); string.setSpan(superscriptSpan, 5, string.length(), Spanned.SPAN_EXCLUSIVE_INCLUSIVE); bgtext.setText(string); }
public TextDecorator setSuperscript(final String... texts) { int index; for (String text : texts) { if (content.contains(text)) { index = content.indexOf(text); decoratedContent.setSpan(new SuperscriptSpan(), index, index + text.length(), flags); } } return this; }
public static CharSequence fixTimeForHTML(String time) { time = fixTime(time); if (!Prefs.use12H()) { return time; } int d = time.indexOf(" "); if (d < 0) return time; time = time.replace(" ", ""); int s = time.length(); Spannable span = new SpannableString(time); span.setSpan(new SuperscriptSpan(), d, s, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); span.setSpan(new RelativeSizeSpan(0.5f), d, s, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); return span; }
private CharSequence genMaxText() { SpannableStringBuilder ssb = new SpannableStringBuilder( String.valueOf(max) + "+"); RelativeSizeSpan span = new RelativeSizeSpan(.8f); // ssb.setSpan(span, 2, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); SuperscriptSpan span2 = new SuperscriptSpan(); // ssb.setSpan(span2, 2, 3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); return ssb; }
@Override public void onSpanClick(SpanButton v) { View view=richEdit.findFocus(); BaseRichEditText editText; if(view instanceof BaseRichEditText){ editText=(BaseRichEditText)view; }else { return; } TypedValue typedValue = new TypedValue(); getContext().getTheme().resolveAttribute(R.attr.colorAccent, typedValue, true); int color=typedValue.data; switch (v.getSpan()){ case SpanButton.SPAN_BOLD:editText.toggleBold();if(editText.isBold()){editText.applyStyleSpan(Typeface.BOLD);v.setColor(color);}else {editText.removeSelectionSpan(Typeface.BOLD);v.setColor(0xff757575);}break; case SpanButton.SPAN_ITALIC:editText.toggleItalic();if(editText.isItalic()){editText.applyStyleSpan(Typeface.ITALIC);v.setColor(color);}else {editText.removeSelectionSpan(Typeface.ITALIC);v.setColor(0xff757575);}break; case SpanButton.SPAN_STRIKETHROUGH:editText.toggleStrikethrough();if(editText.isStrikethrough()){editText.applySelectionSpan(StrikethroughSpan.class);v.setColor(color);}else {editText.removeSelectionSpan(StrikethroughSpan.class);v.setColor(0xff757575);}break; case SpanButton.SPAN_UNDERLINE:editText.toggleUnderLine();if(editText.isUnderLine()){editText.applySelectionSpan(UnderlineSpan.class);v.setColor(color);}else {editText.removeSelectionSpan(UnderlineSpan.class);v.setColor(0xff757575);}break; case SpanButton.SPAN_FOREGROUND:editText.toggleForegroundColor();if(editText.isForegroundColor()){editText.applyColorSpan(ForegroundColorSpan.class,v.getGroundColor());v.setColor(v.getGroundColor());}else {editText.removeSelectionSpan(ForegroundColorSpan.class);v.setColor(0xff757575);}break; case SpanButton.SPAN_BACKGROUND:editText.toggleBackgroundColor();if(editText.isBackgroundColor()){editText.applyColorSpan(BackgroundColorSpan.class,v.getGroundColor());v.setColor(v.getGroundColor());}else {editText.removeSelectionSpan(BackgroundColorSpan.class);v.setColor(0xff757575);}break; case SpanButton.SPAN_SUBSCRIPT:editText.toggleSubscript();if(editText.isSubscript()){editText.applyScriptSpan(SubscriptSpan.class);v.setColor(color);}else {editText.removeSelectionSpan(SubscriptSpan.class);v.setColor(0xff757575);}break; case SpanButton.SPAN_SUPERSCRIPT:editText.toggleSuperscript();if(editText.isSuperscript()){editText.applyScriptSpan(SuperscriptSpan.class);v.setColor(color);}else {editText.removeSelectionSpan(SuperscriptSpan.class);v.setColor(0xff757575);}break; case SpanButton.SPAN_TODO:richEdit.addTodoLayout((BaseContainer) richEdit.findFocus().getParent().getParent());break; case SpanButton.SPAN_DOT:richEdit.addDotLayout((BaseContainer) richEdit.findFocus().getParent().getParent());break; case SpanButton.SPAN_NUMERIC:richEdit.addNumericLayout((BaseContainer) richEdit.findFocus().getParent().getParent());break; case SpanButton.SPAN_PHOTO:richEdit.addPhotoLayout((BaseContainer) richEdit.findFocus().getParent().getParent());break; //case SpanButton.SPAN_TEXTSIZE:editText.changeSize();editText.applyRelativeSpan();break; //case SpanButton.SPAN_BOLD:editText.toggleBold();if(editText.isBold()){editText.applyStyleSpan(Typeface.BOLD);v.setColor(color);}else {editText.removeSelectionSpan(Typeface.BOLD);v.setColor(0xff757575);}break; } }
/** * 设置上标 */ private void showSuperscriptSpan() { TextView tvSuperScriptSpan = (TextView) findViewById(R.id.tv_superscript_span); SpannableString spannableString = new SpannableString("这是第六行设置文字上标:X2"); SuperscriptSpan superscriptSpan = new SuperscriptSpan(); spannableString.setSpan(superscriptSpan,13,14,Spanned.SPAN_INCLUSIVE_EXCLUSIVE); tvSuperScriptSpan.setText(spannableString); }
public void setPromoted(int change) { SpannableString spannable = new SpannableString(String.format(Locale.US, PROMOTED, change)); spannable.setSpan(new SuperscriptSpan(), 0, spannable.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannable.setSpan(new RelativeSizeSpan(0.6f), 0, spannable.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannable.setSpan(new ForegroundColorSpan(mPromotedColorResId), 0, spannable.length(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); mRankTextView.append(spannable); }
@Override public CharSequence prepare(String item) { SpannableString spannableString = new SpannableString("#" + item); spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#85F5F5F5")), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); spannableString.setSpan(new SuperscriptSpan(), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); return spannableString; }
private static void setUpSuperscriptSpan(Span span, SpannableString ss, int start, int end) { if (span.isSuperscript()) { ss.setSpan( new SuperscriptSpan(), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); } }
public Spannable getDisp() { // Add postfix String str = DATE_FORMAT.format(date); if (str.charAt(str.length() - 2) == '1') { str += "th"; } else { switch (str.charAt(str.length() - 1)) { case '1': str += "st"; break; case '2': str += "nd"; break; case '3': str += "rd"; break; default: str += "th"; } } // Format postfix into superscript Spannable sp = new SpannableString(str); sp.setSpan(new SuperscriptSpan(), sp.length() - 2, sp.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); sp.setSpan(new RelativeSizeSpan(.75f), sp.length() - 2, sp.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); return sp; }
private void apply_comment() { addSpan( new TextAppearanceSpan( this, R.style.commentSpan ), m_pos_start, pos_current + 1, Spanned.SPAN_INTERMEDIATE ); addSpan( new ForegroundColorSpan( mColorMid ), m_pos_start, pos_current + 1, Spanned.SPAN_INTERMEDIATE ); addSpan( new SuperscriptSpan(), m_pos_start, pos_current + 1, 0 ); }
public static Node superscript(Object... nodes) { return new SpanNode(new SuperscriptSpan(), nodes); }
@Override public void handleTagNode(TagNode node, SpannableStringBuilder builder, int start, int end) { builder.setSpan(new SuperscriptSpan(), start, end, 33); builder.setSpan(new RelativeSizeSpan(0.8f), start, end, 33); }
public void handleTagNode(TagNode node, SpannableStringBuilder builder, int start, int end, SpanStack spanStack) { spanStack.pushSpan(new SuperscriptSpan(), start, end); }
private void applySpannablesTo(Piece aPiece, SpannableString finalString, int start, int end) { if(aPiece.subscript) { finalString.setSpan(new SubscriptSpan(), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } if(aPiece.superscript) { finalString.setSpan(new SuperscriptSpan(), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } if(aPiece.strike) { finalString.setSpan(new StrikethroughSpan(), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } if(aPiece.underline) { finalString.setSpan(new UnderlineSpan(), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } // style finalString.setSpan(new StyleSpan(aPiece.style), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // absolute text size finalString.setSpan(new AbsoluteSizeSpan(aPiece.textSize), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // relative text size finalString.setSpan(new RelativeSizeSpan(aPiece.textSizeRelative), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // text color finalString.setSpan(new ForegroundColorSpan(aPiece.textColor), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // background color if(aPiece.backgroundColor != -1) { finalString.setSpan(new BackgroundColorSpan(aPiece.backgroundColor), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } }
private void handleEndTag(String tag) { if (tag.equalsIgnoreCase("br")) { handleBr(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("p")) { endCssStyle(tag, mSpannableStringBuilder); endBlockElement(tag, mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("ul")) { endBlockElement(tag, mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("li")) { endLi(tag, mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("div")) { endBlockElement(tag, mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("span")) { endCssStyle(tag, mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("strong")) { end(tag, mSpannableStringBuilder, Bold.class, new StyleSpan(Typeface.BOLD)); } else if (tag.equalsIgnoreCase("b")) { end(tag, mSpannableStringBuilder, Bold.class, new StyleSpan(Typeface.BOLD)); } else if (tag.equalsIgnoreCase("em")) { end(tag, mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("cite")) { end(tag, mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("dfn")) { end(tag, mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("i")) { end(tag, mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("big")) { end(tag, mSpannableStringBuilder, Big.class, new RelativeSizeSpan(1.25f)); } else if (tag.equalsIgnoreCase("small")) { end(tag, mSpannableStringBuilder, Small.class, new RelativeSizeSpan(0.8f)); } else if (tag.equalsIgnoreCase("font")) { endFont(tag, mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("blockquote")) { endBlockquote(tag, mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("tt")) { end(tag, mSpannableStringBuilder, Monospace.class, new TypefaceSpan("monospace")); } else if (tag.equalsIgnoreCase("a")) { endA(tag, mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("u")) { end(tag, mSpannableStringBuilder, Underline.class, new UnderlineSpan()); } else if (tag.equalsIgnoreCase("del")) { end(tag, mSpannableStringBuilder, Strikethrough.class, new StrikethroughSpan()); } else if (tag.equalsIgnoreCase("s")) { end(tag, mSpannableStringBuilder, Strikethrough.class, new StrikethroughSpan()); } else if (tag.equalsIgnoreCase("strike")) { end(tag, mSpannableStringBuilder, Strikethrough.class, new StrikethroughSpan()); } else if (tag.equalsIgnoreCase("sup")) { end(tag, mSpannableStringBuilder, Super.class, new SuperscriptSpan()); } else if (tag.equalsIgnoreCase("sub")) { end(tag, mSpannableStringBuilder, Sub.class, new SubscriptSpan()); } else if (tag.length() == 2 && Character.toLowerCase(tag.charAt(0)) == 'h' && tag.charAt(1) >= '1' && tag.charAt(1) <= '6') { endHeading(tag, mSpannableStringBuilder); } else if (mTagHandler != null) { mTagHandler.handleTag(false, tag, null, mSpannableStringBuilder, mReader); } }
@Override public void apply(Spannable s, TextView tv) { s.setSpan(new SuperscriptSpan(),0,s.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); s.setSpan(new RelativeSizeSpan(0.5f), 0, s.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); }
public StyledText appendSuperscript(CharSequence text){ return append(text, new SuperscriptSpan()); }
private void handleEndTag(String tag) { if (tag.equalsIgnoreCase("br")) { handleBr(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("p")) { endCssStyle(mSpannableStringBuilder); endBlockElement(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("ul")) { endBlockElement(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("li")) { endLi(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("div")) { endBlockElement(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("span")) { endCssStyle(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("strong")) { end(mSpannableStringBuilder, Bold.class, new StyleSpan(Typeface.BOLD)); } else if (tag.equalsIgnoreCase("b")) { end(mSpannableStringBuilder, Bold.class, new StyleSpan(Typeface.BOLD)); } else if (tag.equalsIgnoreCase("em")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("cite")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("dfn")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("i")) { end(mSpannableStringBuilder, Italic.class, new StyleSpan(Typeface.ITALIC)); } else if (tag.equalsIgnoreCase("big")) { end(mSpannableStringBuilder, Big.class, new RelativeSizeSpan(1.25f)); } else if (tag.equalsIgnoreCase("small")) { end(mSpannableStringBuilder, Small.class, new RelativeSizeSpan(0.875f)); } else if (tag.equalsIgnoreCase("font")) { endFont(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("blockquote")) { endBlockquote(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("tt")) { end(mSpannableStringBuilder, Monospace.class, new TypefaceSpan("monospace")); } else if (tag.equalsIgnoreCase("a")) { endA(mSpannableStringBuilder); } else if (tag.equalsIgnoreCase("u")) { end(mSpannableStringBuilder, Underline.class, new UnderlineSpan()); } else if (tag.equalsIgnoreCase("del")) { end(mSpannableStringBuilder, Strikethrough.class, new StrikethroughSpan()); } else if (tag.equalsIgnoreCase("s")) { end(mSpannableStringBuilder, Strikethrough.class, new StrikethroughSpan()); } else if (tag.equalsIgnoreCase("strike")) { end(mSpannableStringBuilder, Strikethrough.class, new StrikethroughSpan()); } else if (tag.equalsIgnoreCase("sup")) { end(mSpannableStringBuilder, Super.class, new SuperscriptSpan()); } else if (tag.equalsIgnoreCase("sub")) { end(mSpannableStringBuilder, Sub.class, new SubscriptSpan()); } else if (tag.length() == 2 && Character.toLowerCase(tag.charAt(0)) == 'h' && tag.charAt(1) >= '1' && tag.charAt(1) <= '6') { endHeading(mSpannableStringBuilder); } else if (mTagHandler != null) { mTagHandler.handleTag(false, tag, mSpannableStringBuilder, mReader); } }
public TextDecorator setSuperscript(final int start, final int end) { checkIndexOutOfBoundsException(start, end); decoratedContent.setSpan(new SuperscriptSpan(), start, end, flags); return this; }
public static void addStyledText(SpannableStringBuilder ssb, CharSequence textToAdd, float relativeSize, int typeFace, int color, boolean strike, boolean superScript) { // add text to builder int startIndex = ssb.length(); ssb.append(textToAdd); // set size if (relativeSize != TEXT_DEF_SIZE) { ssb.setSpan(new RelativeSizeSpan(relativeSize), startIndex, ssb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } // set color if (color != TEXT_DEF_COLOR) { ssb.setSpan(new ForegroundColorSpan(color), startIndex, ssb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } // set typeFace if (typeFace != TEXT_DEF_TYPEFACE) { ssb.setSpan(new StyleSpan(typeFace), startIndex, ssb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } // stroke text also if (strike) { ssb.setSpan(new StrikethroughSpan(), startIndex, ssb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } // subScript text also if (superScript) { ssb.setSpan(new SuperscriptSpan(), startIndex, ssb.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } }
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_spannable); ButterKnife.bind(this); SpannableString spannableString = new SpannableString("前景色背景色相对大小删除线下划线" + "上标小上标下标粗体斜体显示图片点击超链接"); ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.parseColor("#0099EE")); BackgroundColorSpan backgroundColorSpan = new BackgroundColorSpan(Color.parseColor("#AC00FF30")); RelativeSizeSpan relativeSizeSpan = new RelativeSizeSpan(2f); StrikethroughSpan strikethroughSpan = new StrikethroughSpan(); UnderlineSpan underlineSpan = new UnderlineSpan(); SuperscriptSpan superscriptSpan = new SuperscriptSpan(); RelativeSizeSpan relativeSizeSpan2 = new RelativeSizeSpan(0.5f); SubscriptSpan subscriptSpan = new SubscriptSpan(); StyleSpan styleSpan_B = new StyleSpan(Typeface.BOLD); StyleSpan styleSpan_I = new StyleSpan(Typeface.ITALIC); ImageSpan imageSpan = new ImageSpan(this, R.mipmap.ic_launcher); ClickableSpan clickableSpan = new ClickableSpan() { @Override public void onClick(View widget) { Toast.makeText(SpannableActivity.this, "点击", Toast.LENGTH_SHORT).show(); } @Override public void updateDrawState(TextPaint ds) { // 文字不变色 ds.setUnderlineText(false); } }; URLSpan urlSpan = new URLSpan("http://www.sdwfqin.com"); spannableString.setSpan(foregroundColorSpan, 0, 3, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(backgroundColorSpan, 3, 6, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(relativeSizeSpan, 6, 10, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(strikethroughSpan, 10, 13, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(underlineSpan, 13, 16, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(superscriptSpan, 16, 21, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(relativeSizeSpan2, 18, 21, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(subscriptSpan, 21, 23, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(styleSpan_B, 23, 25, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(styleSpan_I, 25, 27, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(imageSpan, 29, 31, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(clickableSpan, 31, 33, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spannableString.setSpan(urlSpan, 33, 36, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); spanString.setMovementMethod(LinkMovementMethod.getInstance()); // 点击背景色 // spanString.setHighlightColor(Color.parseColor("#36969696")); // 可以点击 spanString.setText(spannableString); SpannableStringBuilder builder = new SpannableStringBuilder("哈哈哈"); builder.setSpan(foregroundColorSpan, 0, 3, Spanned.SPAN_INCLUSIVE_EXCLUSIVE); builder.append("lalala"); // 注意:如果使用toString()方法设置的样式就没有了 spanBuilder.setText(builder); }
private void handleEndTag(String tag) { if (tag.equalsIgnoreCase("br")) { handleBr(); } else if (tag.equalsIgnoreCase("p")) { handleP(); } else if (tag.equalsIgnoreCase("div")) { endDiv(); } else if (tag.equalsIgnoreCase("ul")) { endList(false); } else if (tag.equalsIgnoreCase("ol")) { endList(true); } else if (tag.equalsIgnoreCase("li")) { endList(); } else if (tag.equalsIgnoreCase("strong")) { end(Bold.class, new BoldSpan()); } else if (tag.equalsIgnoreCase("b")) { end(Bold.class, new BoldSpan()); } else if (tag.equalsIgnoreCase("em")) { end(Italic.class, new ItalicSpan()); } else if (tag.equalsIgnoreCase("cite")) { end(Italic.class, new ItalicSpan()); } else if (tag.equalsIgnoreCase("dfn")) { end(Italic.class, new ItalicSpan()); } else if (tag.equalsIgnoreCase("i")) { end(Italic.class, new ItalicSpan()); } else if (tag.equalsIgnoreCase("strike")) { end(Strikethrough.class, new StrikethroughSpan()); } else if (tag.equalsIgnoreCase("del")) { end(Strikethrough.class, new StrikethroughSpan()); } else if (tag.equalsIgnoreCase("big")) { end(Big.class, new RelativeSizeSpan(1.25f)); } else if (tag.equalsIgnoreCase("small")) { end(Small.class, new RelativeSizeSpan(0.8f)); } else if (tag.equalsIgnoreCase("font")) { endFont(); } else if (tag.equalsIgnoreCase("blockquote")) { handleP(); end(Blockquote.class, new QuoteSpan()); } else if (tag.equalsIgnoreCase("a")) { endAHref(); } else if (tag.equalsIgnoreCase("u")) { end(Underline.class, new UnderlineSpan()); } else if (tag.equalsIgnoreCase("sup")) { end(Super.class, new SuperscriptSpan()); } else if (tag.equalsIgnoreCase("sub")) { end(Sub.class, new SubscriptSpan()); } else if (tag.length() == 2 && Character.toLowerCase(tag.charAt(0)) == 'h' && tag.charAt(1) >= '1' && tag.charAt(1) <= '6') { handleP(); endHeader(); } else if (sIgnoreTags.contains(tag.toLowerCase(Locale.getDefault()))) { mIgnoreContent = false; } }