2013-05-06 13 views
7

Ai đó có thể đưa ra giải thích rõ ràng về các cờ được tìm thấy trong giao diện Java Spanned cho Android không? The documentation không rõ ràng và tôi yêu cầu thêm chi tiết giống như cách các cờ khác được giải thích trong this SO answer.Giải thích định nghĩa của các cờ này (SPAN_COMPOSING, SPAN_USER, v.v.) từ giao diện Spanned

định nghĩa yêu cầu cho các cờ sau:

SPAN_COMPOSING 
SPAN_INTERMEDIATE 
SPAN_POINT_MARK_MASK 
SPAN_PRIORITY 
SPAN_USER 
SPAN_USER_SHIFT 

Trả lời

11

SPAN_COMPOSING là một lá cờ được sử dụng trên văn bản là đầu vào, và được coi là một khoảng tạm thời, dự định sẽ được gỡ bỏ sau khi nhập xong, "Cờ này được thiết lập trên các nhịp đang được sử dụng để áp dụng thông tin kiểu dáng tạm thời trên văn bản soạn thảo của phương thức nhập, để chúng có thể được tìm thấy và xóa khi văn bản soạn thảo đang được thay thế. "

Here is an example of code sử dụng SPAN_COMPOSING và xóa nó khỏi văn bản; mã có liên quan được trích dẫn dưới đây:

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 là được đối xử như một lá cờ dùng để gán cho một khoảng tạm thời trong khi nó đang trải qua sự thay đổi, và phải được loại bỏ sau khi thay đổi được áp dụng. "Cờ này sẽ được đặt cho thay đổi khoảng trung gian, có nghĩa là sẽ được đảm bảo là một thay đổi khác theo sau".

SPAN_POINT_MARK_MASK là bitmask, được sử dụng chủ yếu cho mục đích so sánh để kiểm tra xem trạng thái bit đủ điều kiện đã được áp dụng hay chưa. Xem sử dụng thích hợp cho nó trong mã được trích dẫn ở trên.

SPAN_PRIORITY đề cập đến mức độ ưu tiên của bố cục văn bản cho mục đích cập nhật; API lưu ý rằng nó chỉ nên được đặt trong trường hợp đặc biệt và do đó không cần thiết phải được thiết lập bởi nhà phát triển.

SPAN_USERSPAN_USER_SHIFT là khu vực lưu trữ để biết thêm dữ liệu tùy chỉnh vô hướng phải được lưu trữ với nhịp nếu nhà phát triển lựa chọn để sử dụng chúng.

Các vấn đề liên quan