如何以编程方式将注释标记添加到字符串
How to add Annotation tags to a String programmatically
In this video Google gave an example for formatting portions of a String
based on Annotation
标签可用于在 strings.xml
内的 String
中设置 key/value 对。
这是一个例子:
strings.xml
<string name="test">Hello <annotation font="sans-serif-medium">World!</annotation></string>
Kotlin 代码:
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
in this article 一起使用,以解决 ReplacementSpans
它们无法流入下一行文本的问题。
我的问题是:
我需要 create/remove 动态注释标签,以便我可以编程方式从标有注释标签的文本部分中删除标签,或将标签添加到非注释文本。
我怎样才能做到这一点?
通常我们附加 String
跨度与 ParcelableSpan
like ForegroundColorSpan
, BackgroundColorSpan
, UnderlineSpan
, TypefaceSpan
的实现......等等
并且通过观察 Annotation
also implements ParcelableSpan
as well, we can use setSpan()
to attach annotation to it, and add the key/value pairs to its constructor.
我的另一个观察是 setSpan()
实际上接受 Object
作为第一个参数。
所以参考引用的问题article example (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
的密钥在这个例子中并不重要,因为我们只需要它的 tag/value。所以将其保留为空字符串。
结果:
In this video Google gave an example for formatting portions of a String
based on Annotation
标签可用于在 strings.xml
内的 String
中设置 key/value 对。
这是一个例子:
strings.xml
<string name="test">Hello <annotation font="sans-serif-medium">World!</annotation></string>
Kotlin 代码:
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
in this article 一起使用,以解决 ReplacementSpans
它们无法流入下一行文本的问题。
我的问题是:
我需要 create/remove 动态注释标签,以便我可以编程方式从标有注释标签的文本部分中删除标签,或将标签添加到非注释文本。
我怎样才能做到这一点?
通常我们附加 String
跨度与 ParcelableSpan
like ForegroundColorSpan
, BackgroundColorSpan
, UnderlineSpan
, TypefaceSpan
的实现......等等
并且通过观察 Annotation
also implements ParcelableSpan
as well, we can use setSpan()
to attach annotation to it, and add the key/value pairs to its constructor.
我的另一个观察是 setSpan()
实际上接受 Object
作为第一个参数。
所以参考引用的问题article example (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
的密钥在这个例子中并不重要,因为我们只需要它的 tag/value。所以将其保留为空字符串。
结果: