TextView相信大家都不陌生,在Android代码中无处不在。常规的用法是一个TextView里面只有一种字体样式,如果想设置花样TextView,就需要用到SpannableString了。下面给大家介绍一个SpannableString的常规用法。
SpannableString关键的方法就两个:
public void setSpan(Object what, int start, int end, int flags) {}
public void removeSpan(Object what) {}
remove方法相信大家都懂了,就是移除样式。下面重点给大家分析一下setSpan方法。setSpan方法有四个参数:
Object what:指各种Span的类型,详见下面说明。
int start:需要设置的文字的起始位置;
int end:需要设置的文字的结束位置;
int flag:这个参数主要是设置span的起始和结束位置包含或不包含的类型。主要有四种类型,详见下面说明。
flag取值:
Spannable. SPAN_INCLUSIVE_EXCLUSIVE
:前面包括,后面不包括,即在文本前插入新的文本会应用该样式,而在文本后插入新文本不会应用该样式;Spannable. SPAN_INCLUSIVE_INCLUSIVE
:前面包括,后面包括,即在文本前插入新的文本会应用该样式,而在文本后插入新文本也会应用该样式;Spannable. SPAN_EXCLUSIVE_EXCLUSIVE
:前面不包括,后面不包括,同上;Spannable. SPAN_EXCLUSIVE_INCLUSIVE
:前面不包括,后面包括,同上。
what常用取值:
BackgroundColorSpan
: 文本背景色ForegroundColorSpan
: 文本颜色MaskFilterSpan
: 修饰效果,如模糊(BlurMaskFilter)浮雕RasterizerSpan
: 光栅效果StrikethroughSpan
: 删除线SuggestionSpan
: 相当于占位符UnderlineSpan
: 下划线AbsoluteSizeSpan
: 文本字体(绝对大小),这里有两个参数 (int size, boolean dip),size:默认单位为px。 dip:true为size的单位是dip,false为px。DynamicDrawableSpan
: 设置图片,基于文本基线或底部对齐。ImageSpan
: 图片RelativeSizeSpan
: 相对大小(文本字体)ScaleXSpan
: 基于x轴缩放StyleSpan
: 字体样式:粗体、斜体等SubscriptSpan
: 下标(数学公式会用到)SuperscriptSpan
: 上标(数学公式会用到)TextAppearanceSpan
: 文本外貌(包括字体、大小、样式和颜色)TypefaceSpan
: 文本字体URLSpan
: 文本超链接ClickableSpan
: 点击事件 在设置ClickableSpan的时候千万别忘了setMovementMethod。
关于what参数的更详细用法可以参考:
下面贴出简单应用代码:
Spannable spannable = new SpannableString("SpanableString设置不同字体样式神器");
spannable.setSpan(new StyleSpan(Typeface.BOLD), 0, 5, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
spannable.setSpan(new AbsoluteSizeSpan(15,true),3,8,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textview.setText(spannable);
最后,分享一个小经验:
之前在封装自定义组件的时候,总会把设置文字的方法写成setContent(String content);参数类型为String,导致后面想修改一下text文字的不同样式都比较麻烦。
我们们可以改成setContent(CharSequence content),参数类型为CharSequence,我们就可以直接传SpannableString或者String了。这样扩展性就好很多了。