在Android 開發(fā)中經(jīng)常遇到這樣的問題:有一段文本转砖,需要給部分文字設(shè)置不同的樣式须鼎,而此時在用TextView就有點懵圈了。TextView雖然也可以解決府蔗,但是布局可能會非常復(fù)雜晋控,也不利于后期的維護,這時候SpannableString就出現(xiàn)了礁竞,SpannableString俗稱:富文本糖荒,而它就可以很好的解決這個問題,使用還非常簡單模捂,可以為個別字符設(shè)置鏈接捶朵,顏色,大小 狂男,點擊事件 等综看。
在一段文字中對部分字符實現(xiàn)點擊 先來看看效果:
案例1.png
在Xml中只需要使用TextView:
<TextView
android:id="@+id/tv"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
在Activity中創(chuàng)建SpannableString對象使用( ClickableSpan ) :
//創(chuàng)建SpannableString 對象,添加字符
SpannableString spannableString = new SpannableString("你叫什么名字岖食?");
//設(shè)置點擊事件
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(@NonNull View view) {
//點擊后要執(zhí)行的任務(wù)
Toast.makeText(TextActivity.this, "我叫小明", Toast.LENGTH_SHORT).show();
}
};
//設(shè)置spannableString樣式
//start :表示設(shè)置鏈接的起始位置
//end : 表示設(shè)置連接的結(jié)束位置
//flags : 表示開始和結(jié)束下標(biāo)是否包含某字符
/** Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 不包括開始红碑,也不包括結(jié)束
* Spanned.SPAN_EXCLUSIVE_INCLUSIVE 不包括開始,但包括結(jié)束
* Spanned.SPAN_INCLUSIVE_INCLUSIVE 即包括開始泡垃,也包括結(jié)束
* Spanned.SPAN_INCLUSIVE_EXCLUSIVE 包括開始析珊,不包括結(jié)束
*/
spannableString.setSpan(clickableSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
//激活點擊事件
mTv.setMovementMethod(LinkMovementMethod.getInstance());
//加入到TextView中
mTv.setText(spannableString);
還可以對文字添加鏈接 (URLSpan ) :
SpannableString spannableString = new SpannableString("我想要打開瀏覽器");
//設(shè)置鏈接地址
URLSpan urlSpan = new URLSpan("https://www.baidu.com");
spannableString.setSpan(urlSpan, 5, 8, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
//激活鏈接
mTv.setMovementMethod(LinkMovementMethod.getInstance());
//加入到TextView中
mTv.setText(spannableString);
最后找到幾個解釋比較全面的網(wǎng)址,大家可以看一下
https://blog.csdn.net/zhaizu/article/details/51038113
https://github.com/Gennki/QRichText
http://www.reibang.com/p/fd507f562676