Android跨区对象

时间:2014-04-01 15:43:32

标签: android textview

假设我有一个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”?

1 个答案:

答案 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参数。