gpt4 book ai didi

android - 如何在 Android 中将一种 Spanned 类型更改为另一种 Spanned 类型?

转载 作者:搜寻专家 更新时间:2023-11-01 07:44:01 51 4
gpt4 key购买 nike

我想在 CharSequence 中获取一种类型的所有 Spanned ,并将它们转换为不同的类型。例如,将所有粗体范围转换为下划线范围:

enter image description here

我该怎么做?

(这是我今天遇到的问题,既然我现在已经解决了,我在这里添加一个问答对。我的答案在下面。)

最佳答案

如何将 Spanned 从一种类型更改为另一种类型

enter image description here

为了改变 Spanned ,你需要做以下事情

  1. 使用 getSpans()
  2. 获取所需类型的所有 Spanned
  3. 使用 getSpanStart()getSpanEnd() 找到每个 Spanned 的范围
  4. 使用 removeSpan() 删除原始 Spanned
  5. 使用 setSpan() 在与旧 Spanned 相同的位置添加新 Spanned 类型

这是执行此操作的代码:

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);
}

注意事项

  • 如果您只想清除所有旧 Spanned ,则在创建 SpannableString 时使用 boldString.toString()。您将使用原始 boldString 来获取 Spanned 范围。

另见

关于android - 如何在 Android 中将一种 Spanned 类型更改为另一种 Spanned 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48569172/

51 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com