假设我有一个EditText:
Editable e = editText.getEditableText(); // length == 2
// ...attach a span start=0, end=2 to e...
int index = e.nextSpanTransition(0, 2, Object.class);
据此:http://developer.android.com/reference/android/text/Spanned.html
index
应为0,因为它说
返回大于或等于start的第一个偏移量,类型类型的标记对象开始或结束
但是index
是2.这是一个错误还是我错过了什么?
或者我甚至误解了文档,因为它可能意味着“大于start
标记对象开始,或者等于标记对象结束的start
”?
答案 0 :(得分:0)
文档还说:
如果没有大于或等于limit
但小于start
的开头或结尾,请或
limit
其中limit
是第二个参数(在您的情况下为2)。您的范围不满足less than limit
,因为它等于它。所以它返回limit
。
以下是解释它的源代码:
/**
* Return the next offset after <code>start</code> but less than or
* equal to <code>limit</code> where a span of the specified type
* begins or ends.
*/
public int nextSpanTransition(int start, int limit, Class kind) {
int count = mSpanCount;
Object[] spans = mSpans;
int[] starts = mSpanStarts;
int[] ends = mSpanEnds;
int gapstart = mGapStart;
int gaplen = mGapLength;
if (kind == null) {
kind = Object.class;
}
for (int i = 0; i < count; i++) {
int st = starts[i];
int en = ends[i];
if (st > gapstart)
st -= gaplen;
if (en > gapstart)
en -= gaplen;
if (st > start && st < limit && kind.isInstance(spans[i]))
limit = st;
if (en > start && en < limit && kind.isInstance(spans[i]))
limit = en;
}
return limit;
}
查看最后2个if
- 句子,在您的情况下st = 0,start = 0,en = 2,limit = 2。第一个if
为false,第二个if
也为false。最后,它返回未更改的limit
参数。