2013-05-06 4 views
7

Czy ktoś może podać jasne objaśnienie flag znalezionych w interfejsie Spanned Java dla systemu Android? The documentation nie jest jasne i wymagam więcej szczegółów w ten sam sposób, w jaki inne flagi zostały objaśnione w this SO answer.Wyjaśnij definicje tych flag (SPAN_COMPOSING, SPAN_USER, itp.) Z interfejsu Spanned.

Żądanie definicje dla następujących flag:

SPAN_COMPOSING 
SPAN_INTERMEDIATE 
SPAN_POINT_MARK_MASK 
SPAN_PRIORITY 
SPAN_USER 
SPAN_USER_SHIFT 

Odpowiedz

11

SPAN_COMPOSING jest flaga stosować na wszystkie teksty są wejścia, i jest uważana za tymczasową rozpiętości, ma być usunięty, gdy wejście jest zakończona, „Ta flaga jest ustawiony na rozpiętościach, które są używane do stosowania tymczasowych informacji o stylach na komponującym się tekście metody wprowadzania danych, dzięki czemu można je znaleźć i usunąć podczas zastępowania tekstów. "

Here is an example of code który używa SPAN_COMPOSING i usuwa go z tekstu; Odpowiedni kod jest cytowany poniżej:

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 ma być traktowana jako flaga służy do przypisania do rozpiętości tymczasowo, gdy jest on w trakcie zmian i zostać usunięte po zmianie jest stosowana. "Ta flaga zostanie ustawiona dla pośrednich zmian zakresu, co oznacza, że ​​po niej nastąpi pewna zmiana."

SPAN_POINT_MARK_MASK jest maską bitów, używane głównie w celach porównawczych, aby sprawdzić, czy stan kwalifikacyjna nieco zostało zastosowane. Zobacz poprawne użycie w kodzie cytowanym powyżej.

SPAN_PRIORITY odnosi się do priorytetu układu tekstu do celów aktualizacji; API zauważa, że ​​powinno ono być ustawiane tylko w nadzwyczajnych okolicznościach i dlatego nie musi być ustawione przez programistę.

SPAN_USER i SPAN_USER_SHIFT obszary do przechowywania kolejnych danych zwyczaj skalarnych być przechowywane z zakresu jeżeli wywoływacz wybiera się nimi posługiwać.