Android(安卓)EditText/TextView使用SpannableString显示复合文本
16lz
2021-12-04
在Android中EditText用于编辑文本,TextView用于显示文本,但是有时候我们需要对其中的文本进行样式等方面的设置。Android为我们提供了SpannableString类来对指定文本进行处理。
2) BackgroundColorSpan 文本背景色
1) ForegroundColorSpan 文本颜色
[java] view plain copy print ?
- privatevoidsetForegroundColorSpan(){
- SpannableStringspanString=newSpannableString("前景色");
- ForegroundColorSpanspan=newForegroundColorSpan(Color.BLUE);
- spanString.setSpan(span,0,3,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- tv.append(spanString);
- }
private void setForegroundColorSpan() { SpannableString spanString = new SpannableString("前景色"); ForegroundColorSpan span = new ForegroundColorSpan(Color.BLUE); spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append(spanString); }
2) BackgroundColorSpan 文本背景色
[java] view plain copy print ?
- privatevoidsetBackgroundColorSpan(){
- SpannableStringspanString=newSpannableString("背景色");
- BackgroundColorSpanspan=newBackgroundColorSpan(Color.YELLOW);
- spanString.setSpan(span,0,3,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- tv.append(spanString);
- }
private void setBackgroundColorSpan() { SpannableString spanString = new SpannableString("背景色"); BackgroundColorSpan span = new BackgroundColorSpan(Color.YELLOW); spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append(spanString); }
3) StyleSpan 字体样式:粗体、斜体等
- privatevoidsetStyleSpan(){
- SpannableStringspanString=newSpannableString("粗体斜体");
- StyleSpanspan=newStyleSpan(Typeface.BOLD_ITALIC);
- spanString.setSpan(span,0,4,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- tv.append(spanString);
- }
private void setStyleSpan() { SpannableString spanString = new SpannableString("粗体斜体"); StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC); spanString.setSpan(span, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append(spanString); }
4) RelativeSizeSpan 相对大小
- privatevoidsetRelativeFontSpan(){
- SpannableStringspanString=newSpannableString("字体相对大小");
- spanString.setSpan(newRelativeSizeSpan(2.5f),0,6,Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
- tv.append(spanString);
- }
private void setRelativeFontSpan() {SpannableString spanString = new SpannableString("字体相对大小");spanString.setSpan(new RelativeSizeSpan(2.5f), 0, 6,Spannable.SPAN_INCLUSIVE_EXCLUSIVE);tv.append(spanString); }
5) TypefaceSpan 文本字体
[html] view plain copy print ?
- privatevoidsetTypefaceSpan(){
- SpannableStringspanString=newSpannableString("文本字体");
- spanString.setSpan(newTypefaceSpan("monospace"),0,4,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- tv.append(spanText);
- }
private void setTypefaceSpan() {SpannableString spanString = new SpannableString("文本字体");spanString.setSpan(new TypefaceSpan("monospace"), 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);tv.append(spanText);}
6) URLSpan 文本超链接
- privatevoidaddUrlSpan(){
- SpannableStringspanString=newSpannableString("超链接");
- URLSpanspan=newURLSpan("http://www.baidu.com");
- spanString.setSpan(span,0,3,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- tv.append(spanString);
- }
private void addUrlSpan() { SpannableString spanString = new SpannableString("超链接"); URLSpan span = new URLSpan("http://www.baidu.com"); spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append(spanString); }
7) ImageSpan 图片
[html] view plain copy print ?
- privatevoidaddImageSpan(){
- SpannableStringspanString=newSpannableString("");
- Drawabled=getResources().getDrawable(R.drawable.ic_launcher);
- d.setBounds(0,0,d.getIntrinsicWidth(),d.getIntrinsicHeight());
- ImageSpanspan=newImageSpan(d,ImageSpan.ALIGN_BASELINE);
- spanString.setSpan(span,0,1,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- tv.append(spanString);
- }
private void addImageSpan() { SpannableString spanString = new SpannableString(" "); Drawable d = getResources().getDrawable(R.drawable.ic_launcher); d.setBounds(0, 0, d.getIntrinsicWidth(), d.getIntrinsicHeight()); ImageSpan span = new ImageSpan(d, ImageSpan.ALIGN_BASELINE); spanString.setSpan(span, 0, 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append(spanString); }
8) ClickableSpan 文本有点击事件
[html] view plain copy print ?
- privateTextViewtextView;
- textView=(TextView)this.findViewById(R.id.textView);
- Stringtext="显示Activity";
- SpannableStringspannableString=newSpannableString(text);
- spannableString.setSpan(newClickableSpan(){
- @Override
- publicvoidonClick(Viewwidget){
- Intentintent=newIntent(Main.this,OtherActivity.class);
- startActivity(intent);
- }
- //表示点击整个text的长度都有效触发这个事件
- },0,text.length(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
- textView.setText(spannableString);
- textView.setMovementMethod(LinkMovementMethod.getInstance());
private TextView textView;textView = (TextView)this.findViewById(R.id.textView);String text = "显示Activity";SpannableString spannableString = new SpannableString(text);spannableString.setSpan(new ClickableSpan() {@Overridepublic void onClick(View widget) {Intent intent = new Intent(Main.this,OtherActivity.class);startActivity(intent);}// 表示点击整个text的长度都有效触发这个事件}, 0, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);textView.setText(spannableString);textView.setMovementMethod(LinkMovementMethod.getInstance());
9) UnderlineSpan 下划线
[html] view plain copy print ?
- privatevoidaddUnderLineSpan(){
- SpannableStringspanString=newSpannableString("下划线");
- UnderlineSpanspan=newUnderlineSpan();
- spanString.setSpan(span,0,3,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- tv.append(spanString);
- }
private void addUnderLineSpan() { SpannableString spanString = new SpannableString("下划线"); UnderlineSpan span = new UnderlineSpan(); spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append(spanString); }
10) StrikethroughSpan 删除线
[html] view plain copy print ?
- privatevoidaddStrikeSpan(){
- SpannableStringspanString=newSpannableString("删除线");
- StrikethroughSpanspan=newStrikethroughSpan();
- spanString.setSpan(span,0,3,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- tv.append(spanString);
- }
private void addStrikeSpan() { SpannableString spanString = new SpannableString("删除线"); StrikethroughSpan span = new StrikethroughSpan(); spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append(spanString); }
11) SuggestionSpan 相当于占位符
12) MaskFilterSpan 修饰效果,如模糊(BlurMaskFilter)、浮雕(EmbossMaskFilter)
13) RasterizerSpan 光栅效果
14) AbsoluteSizeSpan 绝对大小(文本字体)
[html] view plain copy print ?
- privatevoidsetAbsoluteFontSpan(){
- SpannableStringspannableString=newSpannableString("40号字体");
- AbsoluteSizeSpanabsoluteSizeSpan=newAbsoluteSizeSpan(40);
- spannableString.setSpan(absoluteSizeSpan,0,5,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
- editText.append(spannableString);
- }
private void setAbsoluteFontSpan() {SpannableString spannableString = new SpannableString("40号字体");AbsoluteSizeSpan absoluteSizeSpan = new AbsoluteSizeSpan(40);spannableString.setSpan(absoluteSizeSpan, 0, 5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);editText.append(spannableString);}
15) DynamicDrawableSpan 设置图片,基于文本基线或底部对齐。
16) TextAppearanceSpan 文本外貌(包括字体、大小、样式和颜色)
[html] view plain copy print ?
- privatevoidsetTextAppearanceSpan(){
- SpannableStringspanString=newSpannableString("文本外貌");
- TextAppearanceSpantextAppearanceSpan=newTextAppearanceSpan(this,android.R.style.TextAppearance_Medium);
- spanString.setSpan(textAppearanceSpan,0,4,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- tv.append(spanString);
- }
private void setTextAppearanceSpan() {SpannableString spanString = new SpannableString("文本外貌");TextAppearanceSpan textAppearanceSpan = new TextAppearanceSpan(this, android.R.style.TextAppearance_Medium);spanString.setSpan(textAppearanceSpan, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);tv.append(spanString);}
更多相关文章
- Android中动态设置多继承Style/Theme
- Android(安卓)控件之八:AutoCompleteTextView自动完成文本框
- Android中倒计时代码
- android > TabActivity ( actvity 切换 iframe)
- 安卓开发09:常用控件-TextView文本展示
- android EditText 设置输入的文字的格式方式
- 改变tab中indicator文本的颜色
- Android(安卓)UI设计:TextView与EditText
- Android中TextView富文本适配问题