ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
在Android中EditText用于编辑文本,TextView用于显示文本,但是有时候我们需要对其中的文本进行样式等方面的设置。Android为我们提供了SpannableString类来对指定文本进行处理。 1) ForegroundColorSpan        文本颜色 ~~~ 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文本背景色  ~~~ 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         字体样式:粗体、斜体等 ~~~ 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         相对大小 ~~~ private void setRelativeFontSpan() { SpannableString spanString = new SpannableString("字体相对大小"); spanString.setSpan(new RelativeSizeSpan(2.5f), 0, 6,Spannable.SPAN_INCLUSIVE_EXCLUSIVE); tv.append(spanString); } ~~~ 5) TypefaceSpan         文本字体 ~~~ private void setTypefaceSpan() { SpannableString spanString = new SpannableString("文本字体"); spanString.setSpan(new TypefaceSpan("monospace"), 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); tv.append(spanText); } ~~~ 6) URLSpan 文本超链接 ~~~ 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         图片 ~~~ 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                 文本有点击事件 ~~~ private TextView textView; textView = (TextView)this.findViewById(R.id.textView); String text = "显示Activity"; SpannableString spannableString = new SpannableString(text); spannableString.setSpan(new ClickableSpan() { @Override public 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         下划线 ~~~ 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         删除线 ~~~ 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         绝对大小(文本字体) ~~~ 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 文本外貌(包括字体、大小、样式和颜色) ~~~ 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); } ~~~