java - 如何以编程方式将注释标签添加到字符串
问题描述
在这个视频中,谷歌给出了一个String
基于Annotation
标签格式化部分的示例,该标签可用于在 in 中设置键/值String
对strings.xml
。
这是一个例子:
字符串.xml
<string name="test">Hello <annotation font="sans-serif-medium">World!</annotation></string>
科特林代码:
val spannedString = getText(R.string.title) as SpannedString
val annotations = spannedString.getSpans(0, spannedString.length, Annotation::class.java)
for (annotation in annotations) {
if (annotation.key == "font") {
val fontName = annotation.value
val typeFace: Typeface = ...
spannable.setSpan(TypefaceSpan(typeFace), abstract.getSpanStart(annotation),
abstract.getSpanEnd(annotation), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
}
}
这ReplacementSpan
在本文中也用于解决ReplacementSpans
无法流入下一行文本的问题。
我的问题是:
我需要动态创建/删除注释标签,以便我可以以编程方式从标有注释标签的文本部分中删除标签,或将标签添加到非注释文本中。
我怎样才能做到这一点?
解决方案
通常我们附加跨度,String
实现ParcelableSpan
类似ForegroundColorSpan
,,,..等BackgroundColorSpan
UnderlineSpan
TypefaceSpan
并且通过观察Annotation
也实现ParcelableSpan
了,我们可以使用setSpan()
对其附加注释,并将键/值对添加到其构造函数。
我的另一个观察是它setSpan()
实际上接受 aObject
作为第一个参数。
所以参考参考的问题文章示例(GitHub Repo);以编程方式设置注释:
val span = SpannableString("value \n 1 Some Value Value 2")
span.setSpan(Annotation("", "rounded"), 0, 10, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
span.setSpan(Annotation("", "rounded"), 15, 19, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE)
textView.text = span
在这个例子中,键Annotation
无关紧要,因为我们只需要它的标签/值。因此将其保留为空字符串。
结果:
推荐阅读
- python - 使用 from_addr 中的 ascii 代码通过 smtplib 发送电子邮件
- javascript - 使用 Robot Framework RIDE 在 10 秒内未找到警报错误
- javascript - 在 JSX.element 函数中进行 GET 请求反应原生
- java - GridLayout 中的 JButton 从某个纵横比调整大小
- visual-studio - Visual Studio 中缺少 BundlerMinifier.Core 的上下文菜单
- dns - 使用 Cloudflare 和 Cyberpanel 添加子域的过程是什么,其域名用作 WP 多站点的自定义域名?
- java - 如何将变量存储在隐藏值中?
- vue.js - 根据 vue 中的 ID 获取下拉菜单
- node.js - npm install Puppeteer@8.0.0 在 raspbian 上失败
- sql - 我在编辑方法的代码中收到此错误