2013-05-06 32 views

回答

11

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_USERSPAN_USER_SHIFT是額外的自定義標量數據存儲區與跨度如果開發者選擇使用這些存儲。