Android TextView使用SpannableString设置复合文本的方法详解
本文实例讲述了AndroidTextView使用SpannableString设置复合文本的方法。分享给大家供大家参考,具体如下:
TextView通常用来显示普通文本,但是有时候需要对其中某些文本进行样式、事件方面的设置。Android系统通过SpannableString类来对指定文本进行相关处理,具体有以下功能:
1、BackgroundColorSpan背景色
2、ClickableSpan文本可点击,有点击事件
3、ForegroundColorSpan文本颜色(前景色)
4、MaskFilterSpan修饰效果,如模糊(BlurMaskFilter)、浮雕(EmbossMaskFilter)
5、MetricAffectingSpan父类,一般不用
6、RasterizerSpan光栅效果
7、StrikethroughSpan删除线(中划线)
8、SuggestionSpan相当于占位符
9、UnderlineSpan下划线
10、AbsoluteSizeSpan绝对大小(文本字体)
11、DynamicDrawableSpan设置图片,基于文本基线或底部对齐。
12、ImageSpan图片
13、RelativeSizeSpan相对大小(文本字体)
14、ReplacementSpan父类,一般不用
15、ScaleXSpan基于x轴缩放
16、StyleSpan字体样式:粗体、斜体等
17、SubscriptSpan下标(数学公式会用到)
18、SuperscriptSpan上标(数学公式会用到)
19、TextAppearanceSpan文本外貌(包括字体、大小、样式和颜色)
20、TypefaceSpan文本字体
21、URLSpan文本超链接
详细说明如下:
1、BackgroundColorSpan背景色
SpannableStringspanText=newSpannableString("毛票票--https://www.nhooo.com"); spanText.setSpan(newBackgroundColorSpan(Color.GREEN),0,spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText);
2、ClickableSpan文本可点击,有点击事件
查看:Android使用TextView实现无下划线超链接的方法
3、ForegroundColorSpan文本颜色(前景色)
spanText=newSpannableString("毛票票--https://www.nhooo.com"); spanText.setSpan(newForegroundColorSpan(Color.BLUE),6,spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText);
4、MaskFilterSpan修饰效果,如模糊(BlurMaskFilter)、浮雕(EmbossMaskFilter)
spanText=newSpannableString("MaskFilterSpan--https://www.nhooo.com"); intlength=spanText.length(); //模糊(BlurMaskFilter) MaskFilterSpanmaskFilterSpan=newMaskFilterSpan(newBlurMaskFilter(3,Blur.OUTER)); spanText.setSpan(maskFilterSpan,0,length-10,Spannable. SPAN_INCLUSIVE_EXCLUSIVE); //浮雕(EmbossMaskFilter) maskFilterSpan=newMaskFilterSpan(newEmbossMaskFilter(newfloat[]{1,1,3},1.5f,8,3)); spanText.setSpan(maskFilterSpan,length-10,length,Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText);
PS:从效果图看,浮雕效果不明显。把字体设置大点后可以看得清晰些。需要其他效果可以继承MaskFilter来自定义。
6、RasterizerSpan光栅效果
spanText=newSpannableString("StrikethroughSpan"); spanText.setSpan(newStrikethroughSpan(),0,7,Spannable. SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText);
PS:暂不清楚,效果不明显。
7、StrikethroughSpan删除线(中划线)
spanText=newSpannableString("StrikethroughSpan"); spanText.setSpan(newStrikethroughSpan(),0,7,Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText);
8、SuggestionSpan
相当于占位符,一般用在EditText输入框中。当双击此文本时,会弹出提示框选择一些建议(推荐的)文字,选中的文本将替换此占位符。在输入法上用的较多。
PS:API14新增,暂无示例。
9、UnderlineSpan下划线
spanText=newSpannableString("UnderlineSpan"); spanText.setSpan(newUnderlineSpan(),0,spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText);
10、AbsoluteSizeSpan绝对大小(文本字体)
spanText=newSpannableString("AbsoluteSizeSpan"); spanText.setSpan(newAbsoluteSizeSpan(20,true),0,spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText);
PS:把字体大小设置大点,效果硬朗。
11、DynamicDrawableSpan设置图片,基于文本基线或底部对齐。
DynamicDrawableSpandrawableSpan= newDynamicDrawableSpan(DynamicDrawableSpan.ALIGN_BASELINE){ @Override publicDrawablegetDrawable(){ Drawabled=getResources().getDrawable(R.drawable.ic_launcher); d.setBounds(0,0,50,50); returnd; } }; DynamicDrawableSpandrawableSpan2=newDynamicDrawableSpan( DynamicDrawableSpan.ALIGN_BOTTOM){ @Override publicDrawablegetDrawable(){ Drawabled=getResources().getDrawable(R.drawable.ic_launcher); d.setBounds(0,0,50,50); returnd; } }; spanText.setSpan(drawableSpan,3,4,Spannable.SPAN_INCLUSIVE_EXCLUSIVE); spanText.setSpan(drawableSpan2,7,8,Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText);
PS:左边图片基于基线对齐,右边图片基于底部对齐
12、ImageSpan图片
spanText=newSpannableString("ImageSpan"); Drawabled=getResources().getDrawable(R.drawable.ic_launcher); d.setBounds(0,0,50,50); spanText.setSpan(newImageSpan(d),3,4,Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText);
PS:和DynamicDrawableSpan差别不大
13、RelativeSizeSpan相对大小(文本字体)
spanText=newSpannableString("RelativeSizeSpan"); //参数proportion:比例大小 spanText.setSpan(newRelativeSizeSpan(2.5f),3,4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText);
PS:相对大小的比例是基于当前文本字体大小
15、ScaleXSpan基于x轴缩放
spanText=newSpannableString("ScaleXSpan--毛票票"); //参数proportion:比例大小 spanText.setSpan(newScaleXSpan(3.8f),3,7,Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText);
16、StyleSpan字体样式:粗体、斜体等
spanText=newSpannableString("StyleSpan--毛票票"); //Typeface.BOLD_ITALIC:粗体+斜体 spanText.setSpan(newStyleSpan(Typeface.BOLD_ITALIC),3,7, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText);
17、SubscriptSpan下标(数学公式会用到)
spanText=newSpannableString("SubscriptSpan--毛票票"); spanText.setSpan(newSubscriptSpan(),6,7,Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText);
18、SuperscriptSpan上标(数学公式会用到)
spanText=newSpannableString("SuperscriptSpan--毛票票"); spanText.setSpan(newSuperscriptSpan(),6,7,Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText);
19、TextAppearanceSpan文本外貌(包括字体、大小、样式和颜色)
spanText=newSpannableString("TextAppearanceSpan--毛票票"); //若需自定义TextAppearance,可以在系统样式上进行修改 spanText.setSpan(newTextAppearanceSpan(this,android.R.style.TextAppearance_Medium), 6,7,Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText);
PS:系统还提供了相关值TextAppearance_Small,TextAppearance_Large等。如有需要可在以上样式基础上修改。
20、TypefaceSpan文本字体
spanText=newSpannableString("TypefaceSpan--毛票票"); //若需使用自定义字体,可能要重写类TypefaceSpan spanText.setSpan(newTypefaceSpan("monospace"),3,10, Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText);
PS:关于自定义字体的设置,后面将介绍如何使用
21、URLSpan文本超链接
spanText=newSpannableString("URLSpan--毛票票"); spanText.setSpan(newURLSpan("https://www.nhooo.com"),10,spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE); mTVText.append("\n"); mTVText.append(spanText); //让URLSpan可以点击 mTVText.setMovementMethod(newLinkMovementMethod());
更多关于Android相关内容感兴趣的读者可查看本站专题:《Android开发入门与进阶教程》、《Android多媒体操作技巧汇总(音频,视频,录音等)》、《Android基本组件用法总结》、《Android视图View技巧总结》、《Android布局layout技巧总结》及《Android控件用法总结》
希望本文所述对大家Android程序设计有所帮助。