有人能为Android的Spanned Java界面中的标志提供清晰的解释吗? 文档不清楚,我需要更多细节,就像在这个SO答案中解释其他标志一样.
请求以下标志的定义:
SPAN_COMPOSING
SPAN_INTERMEDIATE
SPAN_POINT_MARK_MASK
SPAN_PRIORITY
SPAN_USER
SPAN_USER_SHIFT
Run Code Online (Sandbox Code Playgroud)
Jos*_*hDM 11
SPAN_COMPOSING是用于输入文本的标志,被认为是临时跨度,一旦输入完成就被删除,"此标志在用于在输入方法的撰写文本上应用临时样式信息的跨度上设置,以便在更换作曲文本时可以找到并删除它们."
以下是使用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);
}
Run Code Online (Sandbox Code Playgroud)
SPAN_INTERMEDIATE将被视为一个标志,用于在进行更改时临时分配范围,并在应用更改后删除."这个标志将被设置用于中间跨度变化,这意味着保证跟随它的另一个变化."
SPAN_POINT_MARK_MASK是一个位掩码,主要用于比较目的,以检查是否应用了符合条件的位状态.请参阅上面引用的代码中的正确使用方法.
SPAN_PRIORITY是指用于更新目的的文本布局的优先级; API指出它只应在特殊情况下设置,因此无需由开发人员设置.
SPAN_USER和SPAN_USER_SHIFT是存储区域,用于在开发人员选择使用时使用span存储其他自定义标量数据.