在Android 开发中经常遇到这样的问题:有一段文本,需要给部分文字设置不同的样式,而此时在用TextView就有点懵圈了。TextView虽然也可以解决,但是布局可能会非常复杂,也不利于后期的维护,这时候SpannableString就出现了,SpannableString俗称:富文本,而它就可以很好的解决这个问题,使用还非常简单,可以为个别字符设置链接,颜色,大小 ,点击事件 等。
在一段文字中对部分字符实现点击 先来看看效果:
![](https://img.haomeiwen.com/i19656123/46394cfd63fffcc6.png)
在Xml中只需要使用TextView:
<TextView
android:id="@+id/tv"
android:gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
在Activity中创建SpannableString对象使用( ClickableSpan ) :
//创建SpannableString 对象,添加字符
SpannableString spannableString = new SpannableString("你叫什么名字?");
//设置点击事件
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(@NonNull View view) {
//点击后要执行的任务
Toast.makeText(TextActivity.this, "我叫小明", Toast.LENGTH_SHORT).show();
}
};
//设置spannableString样式
//start :表示设置链接的起始位置
//end : 表示设置连接的结束位置
//flags : 表示开始和结束下标是否包含某字符
/** Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 不包括开始,也不包括结束
* Spanned.SPAN_EXCLUSIVE_INCLUSIVE 不包括开始,但包括结束
* Spanned.SPAN_INCLUSIVE_INCLUSIVE 即包括开始,也包括结束
* Spanned.SPAN_INCLUSIVE_EXCLUSIVE 包括开始,不包括结束
*/
spannableString.setSpan(clickableSpan, 4, 7, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
//激活点击事件
mTv.setMovementMethod(LinkMovementMethod.getInstance());
//加入到TextView中
mTv.setText(spannableString);
还可以对文字添加链接 (URLSpan ) :
SpannableString spannableString = new SpannableString("我想要打开浏览器");
//设置链接地址
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);
最后找到几个解释比较全面的网址,大家可以看一下
https://blog.csdn.net/zhaizu/article/details/51038113
https://github.com/Gennki/QRichText
https://www.jianshu.com/p/fd507f562676
网友评论