Android查缺补漏之SpannableString

TextView是Android开发中一种很常用的控件,经常用来展示文字内容。但有的时候为了带来更好的用户体验,往往需要很炫的样式,如果只是通过使用多个TextView进行堆叠未免过于繁琐,因此我们使用SpannableString对于TextView进行设置。


1.普通的TextView

首先我们先来看一看一般的TextView,一般而言,每一个TextView包含一种字体和颜色。
在xml布局中添加一个TextView控件
    <TextView
        android:textSize="25dp"
        android:id="@+id/text"
        android:text="http://blog.csdn.net/steveyg"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:gravity="center"/>
然后在Activity中对空间进行绑定
        setContentView(R.layout.activity_main);
        TextView tv = (TextView)findViewById(R.id.text);
最后的样式如下图所示


2.构建SpannableString

当我们希望使用SpannableString设置字符串样式时,一般需要先创建一个SpannableString对象
SpannableString spanText = new SpannableString("http://blog.csdn.net/steveyg");
然后调用setSpan方法对于样式进行设置
spanText.setSpan(new BackgroundColorSpan(Color.BLUE), 0, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
我们可以看到这个方法里面共有四个参数,第一个参数是用来指定实现某种效果(比如背景色,超链接等),第二个和第三个参数表示其实的位置和结束的位置,而第四个参数表示实现的类型,可以在Spanned.java中看到全部的类型,常用的有如下四种:

  • SPAN_EXCLUSIVE_EXCLUSIVE 不包含起点和终点
  • SPAN_EXCLUSIVE_INCLUSIVE  不包含起点但包含终点
  • SPAN_INCLUSIVE_EXCLUSIVE  包含起点但不包含终点
  • SPAN_INCLUSIVE_INCLUSIVE·  包含起点和终点

3.背景色

使用BackgroundColorSpan可以对背景色进行设置
spanText.setSpan(new BackgroundColorSpan(Color.BLUE), 4, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);


4.前景色

使用ForegroundColorSpan可以对前景色进行设置
spanText.setSpan(new ForegroundColorSpan(Color.BLUE) , 0, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

5.中划线

使用StrikethroughSpan可以实现文字的中划线效果
spanText.setSpan(new StrikethroughSpan(), 0, spanText.length(), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

6.下划线

使用UnderlineSpan 可以实现文字的下划线效果


7.设置字号大小

使用AbsoluteSizeSpan可以改变字号的绝对大小,而RelativeSizeSpan 可以改变字体的相对大小(相对当前字号)
spanText.setSpan(new AbsoluteSizeSpan(40, true), 0,4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
spanText.setSpan(new RelativeSizeSpan(2.5f), 0,4, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

8.设置图片

通过DynamicDrawableSpan或ImageSpan可以将制定位置的字符替换成图片
        DynamicDrawableSpan drawableSpan =
        new DynamicDrawableSpan(DynamicDrawableSpan.ALIGN_BASELINE) {
            @Override
            public Drawable getDrawable() {
                Drawable d = getResources().getDrawable(R.mipmap.ic_launcher);
                d.setBounds(0, 0, 50, 50);
                return d;
            }
        };

        Drawable d = getResources().getDrawable(R.mipmap.ic_launcher);
        d.setBounds(0, 0, 50, 50);
        spanText.setSpan(new ImageSpan(d), 0,1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);



9.水平缩放

使用ScaleXSpan可以对字符串进行水平缩放
 spanText.setSpan(new ScaleXSpan(2.5f), 0,5, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

10.改变字体样式

使用StyleSpan可以改变字体样式(斜体、粗体等),样式见Typeface
spanText.setSpan(new StyleSpan(Typeface.ITALIC), 0,5, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);


11.上下角标

使用SubscriptSpan可以实现下角标
spanText.setSpan(new SubscriptSpan(), 0,1, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

类似的,可以使用SuperscriptSpan实现上角标


12.修改字体

使用TypefaceSpan可以修改文字字体,如果修改为自定义的字体,需要重写TypefaceSpan
spanText.setSpan(new TypefaceSpan("monospace"), 0,5, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);

13.超链接

使用URLSpan可以实现超链接的效果
        spanText.setSpan(new URLSpan("http://blog.csdn.net/steveyg"), 0,5, Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
        tv.setText(spanText);
        tv.setMovementMethod(new LinkMovementMethod());//点击事件

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值