android – 从Spanned接口解释这些标志的定义(SPAN_COMPOSING,SPAN_USER等)

前端之家收集整理的这篇文章主要介绍了android – 从Spanned接口解释这些标志的定义(SPAN_COMPOSING,SPAN_USER等)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
有人可以清楚地解释 Android跨区Java界面中的标志吗? The documentation不清楚,我需要更多细节,就像在 this SO answer中解释其他标志一样.

请求以下标志的定义:

  1. SPAN_COMPOSING
  2. SPAN_INTERMEDIATE
  3. SPAN_POINT_MARK_MASK
  4. SPAN_PRIORITY
  5. SPAN_USER
  6. SPAN_USER_SHIFT

解决方法

SPAN_COMPOSING是用于输入文本的标志,被认为是临时跨度,一旦输入完成就被删除,“此标志在用于在输入方法的撰写文本上应用临时样式信息的跨度上设置,以便在更换作曲文本时可以找到并删除它们.“

Here is an example of code使用SPAN_COMPOSING并将其从文本中删除;相关代码引用如下:

  1. public static final void removeComposingSpans(Spannable text) {
  2.  
  3. text.removeSpan(COMPOSING);
  4. Object[] sps = text.getSpans(0,text.length(),Object.class);
  5.  
  6. if (sps != null) {
  7.  
  8. for (int i = sps.length-1; i >= 0; i--) {
  9.  
  10. Object o = sps[i];
  11.  
  12. if ((text.getSpanFlags(o) & Spanned.SPAN_COMPOSING) != 0) {
  13.  
  14. text.removeSpan(o);
  15. }
  16. }
  17. }
  18. }
  19.  
  20. public static void setComposingSpans(Spannable text) {
  21.  
  22. final Object[] sps = text.getSpans(0,Object.class);
  23.  
  24. if (sps != null) {
  25.  
  26. for (int i = sps.length - 1; i >= 0; i--) {
  27.  
  28. final Object o = sps[i];
  29.  
  30. if (o == COMPOSING) {
  31.  
  32. text.removeSpan(o);
  33. continue;
  34. }
  35.  
  36. final int fl = text.getSpanFlags(o);
  37.  
  38. if ((fl & (Spanned.SPAN_COMPOSING | Spanned.SPAN_POINT_MARK_MASK))
  39. != (Spanned.SPAN_COMPOSING | Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)) {
  40.  
  41. text.setSpan(o,text.getSpanStart(o),text.getSpanEnd(o),(fl & Spanned.SPAN_POINT_MARK_MASK)
  42. | Spanned.SPAN_COMPOSING
  43. | Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
  44. }
  45. }
  46. }
  47.  
  48. text.setSpan(COMPOSING,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE | Spanned.SPAN_COMPOSING);
  49. }

SPAN_INTERMEDIATE将被视为一个标志,用于在进行更改时临时分配范围,并在应用更改后删除. “这个标志将被设置用于中间跨度变化,这意味着保证跟随它的另一个变化.”

SPAN_POINT_MARK_MASK是一个位掩码,主要用于比较目的,以检查是否应用了符合条件的位状态.请参阅上面引用的代码中的正确使用方法.

SPAN_PRIORITY是指用于更新目的的文本布局的优先级; API指出它只应在特殊情况下设置,因此无需由开发人员设置.

SPAN_USER和SPAN_USER_SHIFT是存储区域,用于在开发人员选择使用时使用span存储其他自定义标量数据.

猜你在找的Android相关文章