Android EditText/TextView使用SpannableString顯示覆合文字
阿新 • • 發佈:2019-02-11
在Android中EditText用於編輯文字,TextView用於顯示文字,但是有時候我們需要對其中的文字進行樣式等方面的設定。Android為我們提供了SpannableString類來對指定文字進行處理。
1) ForegroundColorSpan 文字顏色
[java] view plaincopyprint?- privatevoid setForegroundColorSpan() {
- SpannableString spanString = new SpannableString("前景色");
- ForegroundColorSpan span = new
- spanString.setSpan(span, 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- tv.append(spanString);
- }
2) BackgroundColorSpan文字背景色 [java] view plaincopyprint?
- privatevoid 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 字型樣式:粗體、斜體等
- privatevoid setStyleSpan() {
- SpannableString spanString = new
- StyleSpan span = new StyleSpan(Typeface.BOLD_ITALIC);
- spanString.setSpan(span, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- tv.append(spanString);
- }
4) RelativeSizeSpan 相對大小
- privatevoid setRelativeFontSpan() {
- SpannableString spanString = new SpannableString("字型相對大小");
- spanString.setSpan(new RelativeSizeSpan(2.5f), 0, 6,Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
- tv.append(spanString);
- }
5) TypefaceSpan 文字字型
[html] view plaincopyprint?- private void setTypefaceSpan() {
- SpannableString spanString = new SpannableString("文字字型");
- spanString.setSpan(new TypefaceSpan("monospace"), 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
- tv.append(spanText);
- }
6) URLSpan 文字超連結
- privatevoid 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 文字有點選事件
[html] view plaincopyprint?- 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 下劃線
[html] view plaincopyprint?- 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 plaincopyprint?- 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 plaincopyprint?- 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);
- }