微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android.text.NoCopySpan的实例源码

项目:revolution-irc    文件ServerConnectionInfo.java   
public void addHistoryMessage(CharSequence msg) {
    SpannableString str = new SpannableString(msg);
    for (Object o : str.getSpans(0,str.length(),NocopySpan.class))
        str.removeSpan(o);
    mSentMessageHistory.add(str);
    if (mSentMessageHistory.size() >= HISTORY_MAX_COUNT)
        mSentMessageHistory.remove(0);
}
项目:JotaTextEditor    文件SpannableStringBuilder.java   
/**
 * Create a new SpannableStringBuilder containing a copy of the
 * specified slice of the specified text,including its spans if any.
 */
public SpannableStringBuilder(CharSequence text,int start,int end) {
    int srclen = end - start;

    int len = ArrayUtils.idealChararraySize(srclen + 1);
    mText = new char[len];
    mGapStart = srclen;
    mGapLength = len - srclen;

    TextUtils.getChars(text,start,end,mText,0);

    mSpanCount = 0;
    int alloc = ArrayUtils.idealIntArraySize(0);
    mSpans = new Object[alloc];
    mSpanStarts = new int[alloc];
    mSpanEnds = new int[alloc];
    mSpanFlags = new int[alloc];

    if (text instanceof Spanned) {
        Spanned sp = (Spanned) text;
        Object[] spans = sp.getSpans(start,Object.class);

        for (int i = 0; i < spans.length; i++) {
            if (spans[i] instanceof NocopySpan) {
                continue;
            }

            int st = sp.getSpanStart(spans[i]) - start;
            int en = sp.getSpanEnd(spans[i]) - start;
            int fl = sp.getSpanFlags(spans[i]);

            if (st < 0)
                st = 0;
            if (st > end - start)
                st = end - start;

            if (en < 0)
                en = 0;
            if (en > end - start)
                en = end - start;

            if ( st <= en ) {
                setSpan(spans[i],st,en,fl);
            }
        }
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。