49. Various Android Span
49. Various Android Span
Android various Span preface extends URLSpan UnderlineSpan TypefaceSpan extends TabStopSpanStandard SuperscriptSpan SubscriptSpan extends ScaleXSpan StyleSpan extends QuoteSpan MaskFilterSpan extends ImageSpan IconMarginSpan extends BulletSpan BackgroundColorSpan extends ClickableSpan source code
Preface
Inandroid.text.style
Under the package, there are some Span classes, you canProvides some special content in TextView.. (For example, the color, Font, and size of some content are different, and some fonts can be clicked.)
Another SpannableStringBuilder can help us set the Span.
There are alsoAll source code.
SpannableStringBuilder
SpannableStringBuilder
We can easily set the corresponding Span.
Set Span
SpannableStringBuilder.setSpan(Object what, int start, int end, int flags)
The Flag indicates whether start and end are open or closed intervals.
Flag:
Spanned. SPAN_EXCLUSIVE_EXCLUSIVE --(A, B)
Spanned. SPAN_EXCLUSIVE_INCLUSIVE --(A, B]
Spanned. SPAN_INCLUSIVE_EXCLUSIVE --[A, B)
Spanned. SPAN_INCLUSIVE_INCLUSIVE --[A, B]
URLSpan
Function: Click the text to open a URL.
URLSpan(String url)
SpannableStringBuilder ssb = new SpannableStringBuilder (content); ssb. setSpan (new URLSpan ("https://github.com/CaMnter"), start, sub. length (), Spanned. SPAN_INCLUSIVE_INCLUSIVE); contentTV. setText (ssb); // when you click a link, you must set the MovementMethod object contentTV for all actions to be performed. setMovementMethod (LinkMovementMethod. getInstance (); // sets the color after a click. Here, the ClickableSpan click background contentTV is involved. setHighlightColor (0xff8FABCC );
UnderlineSpan
Function: Underline the text.
UnderlineSpan()
SpannableStringBuilder ssb = new SpannableStringBuilder(content);ssb.setSpan(new UnderlineSpan(), start, start + sub.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);contentTV.setText(ssb);
TypefaceSpan
Function: Set the text font.
TypefaceSpan(String family)
The comments in the constructor source code prompt three system fonts:
Monospace
Serif
Sans-serif
/** * @param family The font family for this typeface. Examples include * "monospace", "serif", and "sans-serif". */ public TypefaceSpan(String family) { mFamily = family; }
SpannableStringBuilder ssb = new SpannableStringBuilder(content);ssb.setSpan(new TypefaceSpan("serif"), start, start + sub.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);contentTV.setText(ssb);
TextAppearanceSpan
Function: Set text font, text style (bold, italic, and so on), text color status, Text underline color status, and so on.
Three construction methods of TextAppearanceSpan
TextAppearanceSpan(Context context, int appearance)
TextAppearanceSpan(Context context, int appearance, int colorList)
TextAppearanceSpan(String family, int style, int size,ColorStateList color, ColorStateList linkColor)
Family:
Monospace
Serif
Sans-serif
Style:
Typeface. NORMAL
Typeface. BOLD
Typeface. ITALIC
Typeface. BOLD_ITALIC
Size: indicates the font size (unit: px)
SpannableStringBuilder ssb = new SpannableStringBuilder(content);ColorStateList colorStateList = null;if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { colorStateList = this.activity.getColorStateList(R.color.selector_apperarance_span);} else { try { colorStateList = ColorStateList.createFromXml(this.activity.getResources(), this.activity.getResources().getXml(R.color.selector_apperarance_span)); } catch (XmlPullParserException | IOException e) { e.printStackTrace(); }}ssb.setSpan(new TextAppearanceSpan("serif", Typeface.BOLD_ITALIC, this.activity.getResources().getDimensionPixelSize(R.dimen.text_appearance_span), colorStateList, colorStateList), start, start + sub.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);contentTV.setText(ssb);
TabStopSpan. Standard
Function: The offset of the MarginLeft of each line (which is related to \ t and \ n ).
TabStopSpan.Standard(int where)
SpannableStringBuilder ssb = new SpannableStringBuilder (content); String [] subs = content. split (""); ssb = new SpannableStringBuilder ();/*** TabStopSpan. standard related to \ t and \ n * TabStopSpan. standard has a relationship with \ t and \ n */for (String sub1: subs) {ssb. append ("\ t "). append (sub1 ). append (""); ssb. append ("\ n");} ssb. setSpan (new TabStopSpan. standard (126), 0, ssb. length (), Spanned. SPAN_INCLUSIVE_INCLUSIVE); contentTV. setText (ssb );
Vcfnwyw4uu3bmp mrhcmq = "src =" http://www.bkjia.com/uploads/allimg/160101/0413234515-4.png "title =" \ "/>
SuperscriptSpan
Function: Set the text to the upper mark, which is used in mathematical formulas.
SuperscriptSpan(Parcel src)
SpannableStringBuilder ssb = new SpannableStringBuilder(content);ssb.replace(start, start + sub.length(), "Save6");Parcel parcel = Parcel.obtain();parcel.writeInt(6);int sixPosition = ssb.toString().indexOf("6");ssb.setSpan(new SuperscriptSpan(parcel), sixPosition, sixPosition + 1, Spanned.SPAN_INCLUSIVE_INCLUSIVE);parcel.recycle();contentTV.setText(ssb);
SubscriptSpan
Function: The text is set as a subscript, which is used in the chemical formula.
SubscriptSpan(Parcel src)
SpannableStringBuilder ssb = new SpannableStringBuilder(content);ssb.replace(start, start + sub.length(), "Save6");Parcel parcel = Parcel.obtain();parcel.writeInt(6);int sixPosition = ssb.toString().indexOf("6");ssb.setSpan(new SubscriptSpan(parcel), sixPosition, sixPosition + 1, Spanned.SPAN_INCLUSIVE_INCLUSIVE);parcel.recycle();contentTV.setText(ssb);
StrikethroughSpan
Function: Delete text.
StrikethroughSpan()
SpannableStringBuilder ssb = new SpannableStringBuilder(content);ssb.setSpan(new StrikethroughSpan(), start, start + sub.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);contentTV.setText(ssb);
ScaleXSpan
Function: Horizontal text scaling.
ScaleXSpan(float proportion)
Proportion: scaling ratio
SpannableStringBuilder ssb = new SpannableStringBuilder(content);ssb.setSpan(new ScaleXSpan(2.0f), start, start + sub.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);contentTV.setText(ssb);
StyleSpan
Function: Set the text style (normal, bold, italic, bold italic ).
StyleSpan(int style)
Style:
Typeface. NORMAL
Typeface. BOLD
Typeface. ITALIC
Typeface. BOLD_ITALIC
SpannableStringBuilder ssb = new SpannableStringBuilder(content);ssb.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), start, start + sub.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);contentTV.setText(ssb);
RelativeSizeSpan
Function: Sets the relative text size, which is the relative proportion of the text size.
RelativeSizeSpan(float proportion)
Proportion: Size ratio.
SpannableStringBuilder ssb = new SpannableStringBuilder(content);ssb.setSpan(new RelativeSizeSpan(6.0f), start, start + sub.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);contentTV.setText(ssb);
QuoteSpan
Function: Set the reference style (a vertical line) on the left side of the text ).
QuoteSpan(@ColorInt int color)
Color: The color of the vertical line.
SpannableStringBuilder ssb = new SpannableStringBuilder(content);ssb.setSpan(new QuoteSpan(0xff000000), start, start + sub.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);contentTV.setText(ssb);
MaskFilterSpan
Function: Set the text blur effect and relief effect.
MaskFilterSpan(MaskFilter filter)
MaskFilter:
BlurMaskFilter:Blur Effect
EmbossMaskFilter:Embossed Effect
SpannableStringBuilder ssb = new SpannableStringBuilder(content);MaskFilterSpan embossMaskFilterSpan = new MaskFilterSpan(new EmbossMaskFilter(new float[]{3, 3, 9}, 3.0f, 12, 16));ssb.setSpan(embossMaskFilterSpan, start, start + sub.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);contentTV.setText(ssb);String you = "you";int indexYou = content.indexOf(you);MaskFilterSpan blurMaskFilterSpan = new MaskFilterSpan(new BlurMaskFilter(3, BlurMaskFilter.Blur.OUTER));ssb.setSpan(blurMaskFilterSpan, indexYou, indexYou + you.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);contentTV.setText(ssb);
LeadingMarginSpan. Standard
Function: Set text indent.
LeadingMarginSpan.Standard(int first, int rest)
First: the margin left offset of the first line.
Rest: the margin left offset of other rows.
SpannableStringBuilder ssb = new SpannableStringBuilder(content);ssb.append(" ") .append(ssb.toString()) .append(ssb.toString()) .append(ssb.toString());ssb.setSpan(new LeadingMarginSpan.Standard(96, 36), 0, ssb.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);contentTV.setText(ssb);
ImageSpan
Function: Insert text into an image.
There are many constructor methods:
ImageSpan(Context context, Bitmap b)
ImageSpan(Context context, Bitmap b, int verticalAlignment)
ImageSpan(Drawable d)
ImageSpan(Drawable d, int verticalAlignment)
ImageSpan(Drawable d, String source)
ImageSpan(Drawable d, String source, int verticalAlignment)
ImageSpan(Context context, Uri uri)
ImageSpan(Context context, Uri uri, int verticalAlignment)
ImageSpan(Context context, @DrawableRes int resourceId)
ImageSpan(Context context, @DrawableRes int resourceId, int verticalAlignment)
VerticalAlignment:
ImageSpan. ALIGN_BOTTOM
ImageSpan. ALIGN_BASELINE
Source: The local path String of the image.(Xxx/xxx.jpg)
Uri: The uri of the image.
SpannableStringBuilder ssb = new SpannableStringBuilder(content);ssb.replace(start, start + sub.length(), " Save");ssb.setSpan(new ImageSpan(this.activity, R.mipmap.ic_mm_1, ImageSpan.ALIGN_BASELINE), 0, 1, Spanned.SPAN_INCLUSIVE_INCLUSIVE);contentTV.setText(ssb);
IconMarginSpan
Function: Insert text into image + Margin.
IconMarginSpan(Bitmap b, int pad)
Pad: the offset of margin.
SpannableStringBuilder ssb = new SpannableStringBuilder(content);Bitmap bitmap = BitmapFactory.decodeResource(this.activity.getResources(), R.mipmap.ic_mm_1);ssb.setSpan(new IconMarginSpan(bitmap, 60), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//bitmap.recycle();contentTV.setText(ssb);
ForegroundColorSpan
Function: Set the text color.
ForegroundColorSpan(@ColorInt int color)
SpannableStringBuilder ssb = new SpannableStringBuilder(content);ssb.setSpan(new ForegroundColorSpan(0xff303F9F), start, start + sub.length(), Spanned.SPAN_INCLUSIVE_INCLUSIVE);contentTV.setText(ssb);
DrawableMarginSpan
Function: Insert text into image + Margin.
DrawableMarginSpan(Drawable b, int pad)
Pad: the offset of margin.
SpannableStringBuilder ssb = new SpannableStringBuilder(content);ssb.setSpan(new DrawableMarginSpan(ResourcesUtil.getDrawable(this.activity, R.mipmap.ic_mm_1), 6), 0, 1, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);contentTV.setText(ssb);
BulletSpan
Function: Similar
- The dot effect of the label.
BulletSpan(int gapWidth, int color)
Gap Width: the gap between the dot and text.
Color: The dot color.
SpannableStringBuilder ssb = new SpannableStringBuilder(content);ssb.setSpan(new BulletSpan(66, 0xff303F9F), start, start + sub.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);contentTV.setText(ssb);
BackgroundColorSpanFunction: Set the background color.
BackgroundColorSpan(int color)
SpannableStringBuilder ssb = new SpannableStringBuilder(content);String you = "you";int indexYou = content.indexOf(you);ssb.setSpan(new BackgroundColorSpan(0x2f303F9F), start, start + sub.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);ssb.setSpan(new BackgroundColorSpan(0x2fFF4081), indexYou, indexYou + you.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);contentTV.setText(ssb);
AlignmentSpan. StandardFunction: Set text alignment.
AlignmentSpan.Standard(Layout.Alignment align)
Align:
Layout. Alignment. ALIGN_NORMAL
Layout. Alignment. ALIGN_OPPOSITE
Layout. Alignment. ALIGN_CENTER
Layout. Alignment. ALIGN_LEFT
Layout. Alignment. ALIGN_RIGHT
SpannableStringBuilder ssb = new SpannableStringBuilder(content);ssb.setSpan(new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER), 0, ssb.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);contentTV.setText(ssb);
AbsoluteSizeSpanFunction: Set the absolute text size.
AbsoluteSizeSpan(int size, boolean dip)
Size: the default unit is px.
Dip: the unit of true to size is dip, and false to px.
SpannableStringBuilder ssb = new SpannableStringBuilder(content);ssb.setSpan(new AbsoluteSizeSpan(26, true), start, start + sub.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);contentTV.setText(ssb);
ClickableSpanFunction: Clickable text.
Abstract class, which must be extended by yourself.
ClickableSpanNoUnderline
Public class ClickableSpanNoUnderline extends ClickableSpan {private static final String TAG = "ClickableSpan"; private static final int NO_COLOR =-206; private int color; private OnClickListener onClickListener; public ClickableSpanNoUnderline (int color, onClickListener onClickListener) {super (); this. color = color; this. onClickListener = onClickListener;} public ClickableSpanNoUnderline (OnCli CkListener onClickListener) {this (NO_COLOR, onClickListener);}/*** Makes the text underlined and in the link color. ** @ param ds */@ Override public void updateDrawState (@ NonNull TextPaint ds) {super. updateDrawState (ds); // set the text color if (this. color = NO_COLOR) {ds. setColor (ds. linkColor);} else {ds. setColor (this. color);} ds. clearShadowLayer (); // remove the underline ds. setUnderlineText (false); ds. bgColor = Color. TRANSPARENT;}/*** Performs the click action associated with this span. ** @ param widget */@ Override public void onClick (View widget) {if (this. onClickListener! = Null) {this. onClickListener. onClick (widget, this);} else {Log. w (TAG, "listener was null") ;}/ *** callback interface, which calls back its onClick event * to indicate whether the external user is clicked */public interface OnClickListener
{/*** ClickableSpan is clicked ** @ param widget * @ param span */void onClick (View widget, T span );}}
SpanClickableSpan
private class SpanClickableSpan extends ClickableSpanNoUnderline { private String urlString; public String getUrlString() { return urlString; } public void setUrlString(String urlString) { this.urlString = urlString; } public SpanClickableSpan(int color, OnClickListener onClickListener) { super(color, onClickListener); } public SpanClickableSpan(OnClickListener onClickListener) { super(onClickListener); }}
Start to use
SpannableStringBuilder ssb = new SpannableStringBuilder (content); SpanClickableSpan spanClickableSpan = new SpanClickableSpan (0xffFF4081, new ClickableSpanNoUnderline. onClickListener () {/*** ClickableSpan is clicked ** @ param widget * @ param span */@ Override public void onClick (View widget, SpanClickableSpan span) {String urlString = span. getUrlString (); if (TextUtils. isEmpty (urlString) return; Uri uri = Uri. parse (urlString); Context context = widget. getContext (); Intent intent = new Intent (Intent. ACTION_VIEW, uri); intent. putExtra (Browser. EXTRA_APPLICATION_ID, context. getPackageName (); try {context. startActivity (intent);} catch (ActivityNotFoundException e) {Log. w ("URLSpan", "Activity was not found for intent," + intent. toString () ;}}); spanClickableSpan. setUrlString ("https://github.com/CaMnter"); ssb. setSpan (spanClickableSpan, start, start + sub. length (), Spanned. SPAN_EXCLUSIVE_EXCLUSIVE); contentTV. setText (ssb); // when you click a link, you must set the MovementMethod object contentTV for all actions to be performed. setMovementMethod (LinkMovementMethod. getInstance (); // sets the color after a click. Here, the ClickableSpan click background contentTV is involved. setHighlightColor (0x00000000 );
Source codeYou can go to githubNo. 32. Of course, we also need Star, T.