Ответ 1
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);
}
SPAN_INTERMEDIATE должен рассматриваться как флаг, используемый для временного назначения временного интервала, когда он подвергается изменениям, и должен быть удален после применения изменения. "Этот флаг будет установлен для промежуточных изменений диапазона, то есть после него будет гарантировано другое изменение".
SPAN_POINT_MARK_MASK - это битовая маска, в основном используемая для сравнения, чтобы проверить, было ли применено состояние квалификационного бита. См. Правильное использование для него в приведенном выше коде.
SPAN_PRIORITY относится к приоритету макета текста для целей обновления; API отмечает, что его следует устанавливать только в чрезвычайных обстоятельствах и, следовательно, не нужно устанавливать разработчиком.
SPAN_USER и SPAN_USER_SHIFT - это области хранения для дополнительных пользовательских скалярных данных, которые будут храниться с диапазоном, если разработчик решит их использовать.