簡體   English   中英

如何在Android中將一種跨度類型更改為另一種?

[英]How to change one span type to another in Android?

我想在CharSequence采用一種類型的所有跨度,並將它們轉換為另一種類型。 例如,將所有粗體跨度轉換為下划線跨度:

在此處輸入圖片說明

我該怎么做?

(這是我今天面臨的一個問題,因為我現在已經解決了這個問題,所以我在這里添加了一個問答環節。我的答案如下。)

如何將跨度從一種類型更改為另一種類型

在此處輸入圖片說明

為了更改跨度,您需要執行以下操作

  1. 使用getSpans()獲取所需類型的所有范圍
  2. 使用getSpanStart()getSpanEnd()查找每個范圍的范圍
  3. 使用removeSpan()刪除原始范圍
  4. 使用setSpan()在與舊跨度相同的位置添加新跨度類型

這是執行此操作的代碼:

Spanned boldString = Html.fromHtml("Some <b>text</b> with <b>spans</b> in it.");

// make a spannable copy so that we can change the spans (Spanned is immutable)
SpannableString spannableString = new SpannableString(boldString);

// get all the spans of type StyleSpan since bold is StyleSpan(Typeface.BOLD)
StyleSpan[] boldSpans = spannableString.getSpans(0, spannableString.length(), StyleSpan.class);

// loop through each bold span one at a time
for (StyleSpan boldSpan : boldSpans) {

    // get the span range
    int start = spannableString.getSpanStart(boldSpan);
    int end = spannableString.getSpanEnd(boldSpan);

    // remove the bold span
    spannableString.removeSpan(boldSpan);

    // add an underline span in the same place
    UnderlineSpan underlineSpan = new UnderlineSpan();
    spannableString.setSpan(underlineSpan, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}

筆記

  • 如果您只想清除所有舊的跨度,則在創建SpannableString時使用boldString.toString() 您將使用原始的boldString來獲取跨度范圍。

也可以看看

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM