解决SpannableString在Android组件间传递时显示失效的问题

问题:在A activity中传递一个SpannableString到B activity中,并最终传递到B activity中的TextView中,但是没有展示出Span效果。

解决:阅读TextView.setText()方法

 // If suggestions are not enabled, remove the suggestion spans from the text
 if (!isSuggestionsEnabled()) {
 	text = removeSuggestionSpans(text);
 }
        
...

if (type == BufferType.EDITABLE || getKeyListener() != null
        || needEditableForNotification) {
        //略
} else if (precomputed != null) {
        //略
} else if (type == BufferType.SPANNABLE || mMovement != null) {
    text = mSpannableFactory.newSpannable(text);
} else if (!(text instanceof CharWrapper)) {
    text = TextUtils.stringOrSpannedString(text);
}

看到会根据BufferType对传入的text重新赋值,于是回溯找到传入BufferType的地方:

public void setText(CharSequence text, BufferType type) {
    setText(text, type, true, 0);

    if (mCharWrapper != null) {
        mCharWrapper.mChars = null;
    }
}

公有方法,传入BufferType,查看BufferType:

/*
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值