一、SpannableString概述
SpannableString是Android中的一個類,用於處理富文本。在一個TextView中,我們可以設置不同的樣式、顏色、大小、下劃線、點擊事件等等。SpannableString可以幫助我們輕鬆實現這些富文本效果。這個類不僅可以應用於TextView,還可以應用於EditText。
二、SpannableString使用
1. 創建SpannableString對象
創建SpannableString對象很簡單,只需要提供一個字符串,就可以得到一個沒有任何格式的SpannableString對象。
SpannableString spannableString = new SpannableString("這是一個SpannableString對象");
2. 設置文本樣式
將一段文字設置為加粗或 italic 樣式可以通過StyleSpan來實現。下劃線可以通過UnderlineSpan來實現,刪除線可以通過StrikethroughSpan來實現。
// 加粗樣式 StyleSpan boldSpan = new StyleSpan(Typeface.BOLD); spannableString.setSpan(boldSpan, 2, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // italic樣式 StyleSpan italicSpan = new StyleSpan(Typeface.ITALIC); spannableString.setSpan(italicSpan, 6, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // 下劃線 UnderlineSpan underlineSpan = new UnderlineSpan(); spannableString.setSpan(underlineSpan, 10, 12, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); // 刪除線 StrikethroughSpan strikethroughSpan = new StrikethroughSpan(); spannableString.setSpan(strikethroughSpan, 14, 16, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
3. 設置文本顏色
通過ForegroundColorSpan可以為文本設置顏色。
ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.RED); spannableString.setSpan(colorSpan, 18, 20, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
4. 設置文本大小
通過RelativeSizeSpan可以為文本設置相對大小。
RelativeSizeSpan sizeSpan = new RelativeSizeSpan(1.5f); spannableString.setSpan(sizeSpan, 22, 24, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
5. 設置文本超鏈接
通過URLSpan可以為文本設置超鏈接,當用戶點擊這段文本時,會打開一個指定的URL地址。
String url = "https://www.google.com"; URLSpan urlSpan = new URLSpan(url); spannableString.setSpan(urlSpan, 26, 28, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
6. 設置文本點擊事件
通過ClickableSpan可以為文本設置點擊事件,當用戶點擊這段文本時,會調用指定的click方法。
ClickableSpan clickableSpan = new ClickableSpan() { @Override public void onClick(View widget) { Toast.makeText(MainActivity.this, "點擊了文本", Toast.LENGTH_SHORT).show(); } }; spannableString.setSpan(clickableSpan, 30, 32, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); textView.setMovementMethod(LinkMovementMethod.getInstance()); textView.setText(spannableString);
三、SpannableStringBuilder使用
SpannableStringBuilder類和StringBuilder類很像,它也是用於構建字符串的,但它可以為添加的字符串設置樣式。可以將多個SpannableString對象拼接在一起。
SpannableStringBuilder builder = new SpannableStringBuilder(); String text1 = "這是第一段文字 "; String text2 = "這是第二段文字 "; String text3 = "這是第三段文字 "; SpannableString spannableString1 = new SpannableString(text1); SpannableString spannableString2 = new SpannableString(text2); SpannableString spannableString3 = new SpannableString(text3); ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.RED); spannableString1.setSpan(colorSpan, 2, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); StyleSpan italicSpan = new StyleSpan(Typeface.ITALIC); spannableString2.setSpan(italicSpan, 6, 8, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); builder.append(spannableString1); builder.append(spannableString2); builder.append(spannableString3); textView.setText(builder);
四、Spanned接口和可擴展的Span
SpannableString實現了Spanned接口。Spanned接口定義了一個方法getSpans,它可以返回指定範圍內的所有Span對象。這個方法可以被用於刪除指定範圍內的Span對象。
BackgroundColorSpan backgroundColorSpan = new BackgroundColorSpan(Color.YELLOW); spannableString.setSpan(backgroundColorSpan, 0, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.BLUE); spannableString.setSpan(foregroundColorSpan, 2, 6, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); Object[] spans = ((Spanned) spannableString).getSpans(1, 4, Object.class); for (Object object : spans) { spannableString.removeSpan(object); } textView.setText(spannableString);
如果Spanned接口中沒有定義的Span,可以自定義一個Span。
public class MySpan extends CharacterStyle { @Override public void updateDrawState(@NonNull TextPaint paint) { paint.setColor(Color.GREEN); paint.setTextSize(60); } } MySpan mySpan = new MySpan(); spannableString.setSpan(mySpan, 2, 6, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
五、總結
SpannableString是Android提供的一個非常強大的類,可以非常簡單地實現富文本效果。通過掌握SpannableString的使用方法,我們可以輕鬆地給用戶帶來更好的閱讀體驗。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/239014.html