SPAN_COMPOSING 是用于输入文本的标志,被认为是临时跨度,一旦输入完成就将被删除,“此标志设置在正在使用的跨度上在输入法的组成文本上应用临时样式信息,以便在替换组成文本时可以找到并删除它们。”
Here is an example of code 使用 SPAN_COMPOSING 并将其从文本中删除;相关代码如下:
public static final void removeComposingSpans(Spannable text) {
text.removeSpan(COMPOSING);
Object[] sps = text.getSpans(0, text.length(), Object.class);
if (sps != null) {
for (int i = sps.length-1; i >= 0; i--) {
Object o = sps[i];
if ((text.getSpanFlags(o) & Spanned.SPAN_COMPOSING) != 0) {
text.removeSpan(o);
}
}
}
}
public static void setComposingSpans(Spannable text) {
final Object[] sps = text.getSpans(0, text.length(), Object.class);
if (sps != null) {
for (int i = sps.length - 1; i >= 0; i--) {
final Object o = sps[i];
if (o == COMPOSING) {
text.removeSpan(o);
continue;
}
final int fl = text.getSpanFlags(o);
if ((fl & (Spanned.SPAN_COMPOSING | Spanned.SPAN_POINT_MARK_MASK))
!= (Spanned.SPAN_COMPOSING | Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)) {
text.setSpan(o, text.getSpanStart(o), text.getSpanEnd(o),
(fl & Spanned.SPAN_POINT_MARK_MASK)
| Spanned.SPAN_COMPOSING
| Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
text.setSpan(COMPOSING, 0, text.length(),
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE | Spanned.SPAN_COMPOSING);
}
SPAN_INTERMEDIATE 将被视为一个标志,用于在进行更改时临时分配给跨度,并在应用更改后将其删除。 “此标志将为中间跨度更改设置,这意味着它之后肯定会有另一个更改。”
SPAN_POINT_MARK_MASK 是位掩码,主要用于比较目的,以检查是否应用了合格的位状态。在上面引用的代码中查看它的正确用法。
SPAN_PRIORITY 是指用于更新目的的文本布局的优先级; API 说明它只应在特殊情况下设置,因此无需由开发人员设置。
SPAN_USER 和 SPAN_USER_SHIFT 是用于存储额外自定义标量数据的存储区域,如果开发人员选择使用它们,它们将与 span 一起存储。