SpannableStringBuilder,提高代码的一个android类

前段时间做项目,遇到了要对一组文字添加图片和设置文字不同的效果!其中下图的12项是通过服务器获取的数据。想想怎么弄呢,这还得写两个textview,还要设置对齐等等,当时心里就一万个不乐意,琢磨能不能有什么简单的办法。。


以后遇到问题都写下来记录下来吧,也当做我学习的一个总结。


费了不少力气,原来google早就给我们写好了,只需要简单的调用就好!

就是SpannableStringBuilder,以前貌似没有听过。学习一下,果然很好用。


废话不多说,直接上代码。


SpannableStringBuilder stringBuilder = new SpannableStringBuilder("中国人民站起来了!!!");
        stringBuilder.append("美国人民趴下了!!");
构造方法是不是很简单,直接new一个就好


forgroundColorSpan:设置字体颜色。

ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#f00fdd"));


BackgroundColorSpan:设置背景颜色
BackgroundColorSpan backgroundColorSpan = new BackgroundColorSpan(Color.parseColor("#c00dfe"));

AbsoluteSizeSpan:设置字体大小。
StyleSpan:设置字体风格,有加粗,斜体
        StyleSpan styleSpan1 = new StyleSpan(Typeface.ITALIC);
ImageSpan:设置图片。
        ImageSpan imageSpan = new ImageSpan(this,R.mipmap.ic_launcher);

接下来要做的就是把写好的Span类设置给SpannableStringBuilder就好

stringBuilder.setSpan(colorSpan,2,8, Spanned.SPAN_INCLUSIVE_INCLUSIVE);
        stringBuilder.setSpan(backgroundColorSpan,3,7,Spanned.SPAN_INCLUSIVE_INCLUSIVE);
        stringBuilder.setSpan(sizeSpan,10,16,Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
        stringBuilder.setSpan(styleSpan1,1,6,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        stringBuilder.setSpan(imageSpan,5,6,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
说明一下这几个参数:
setSpan(Object what, int start, int end, int flags)
what:就是我们刚刚写的Span类
start:开始的位置,
end:结束的位置。如果是图片,一般需要占位SuggestionSpan 。或者空格也行,不然文本会被遮住
flag:取值有如下四个
Spannable.SPAN_EXCLUSIVE_INCLUSIVE:在 Span前面输入的字符不应用 Span的效果,在后面输入的字符应用Span效果。 
Spannable.SPAN_INCLUSIVE_EXCLUSIVE:在 Span前面输入的字符应用 Span 的效果,在后面输入的字符不应用Span效果。
Spannable.SPAN_INCUJSIVE_INCLUSIVE:在 Span前后输入的字符都应用 Span 的效果。
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括。
我看资料上是这么说,但是实际测试中好像没有这个效果。我感觉都一样,就没有深究了,达到了效果

然后只需要把SpannableStringBuilder设置给textview就好了

tv.setText(stringBuilder);

看效果


但是呢,这是不是太简单了呢。我们来看看微信朋友圈或者QQ空间类似的地方:

在朋友圈,点击用户名字的时候是去到用户的主页,而点击其他地方是回复功能。

那这点击事件怎么做呢?

google也已经给你想好了:

只需要再写一个Span类就好

        ClickableSpan clickableSpan = new ClickableSpan() {
            @Override
            public void onClick(View widget) {
                Toast.makeText(MainActivity.this,"日本人地震了!",Toast.LENGTH_LONG).show();
            }
        };

然后设置给SpannableStringBuilder就好
 stringBuilder.setSpan(clickableSpan,10,16,Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值