Spannable设置TextView样式

2019-08-07  本文已影响0人  仕囵弹

TextView的setText方法需要一个CharSequence对象,而Spannable是CharSequence的子类,而Spannable也是一个接口,所以使用他的子类来设置样式,比较常用的子类是SpannableString和SpannableStringBuilder,而使用这两个类来设置样式其实也比较简单,主要是Spannable的setSpan方法

public void setSpan(Object what, int start, int end, int flags);

第二,第三这两个参数是设置指定的样式在哪个位置,分别表示开始位置和结束位置,要说明的一点是,start是包含当前位置,end是不包含当前位置,这应该大伙们都知道的了,这里主要说说第一个和第四个参数

what

这里就列举出一部分,还有一部分就不列举了,用法差不多,也可以自定义,继承CharacterStyle类,重写updateDrawState方法,会给一个TextPaint类的对象,而TextPaint继承Paint,画过控件的应该都用过吧,那么剩下的就好办了😏

flags

其实这几个都很好理解,可以是这样理解,SPAN-前-后,前是指定范围(start - end)前插入的新字符的设置,后是指定范围后插入的新字符的设置,INCLUSIVE是跟随,EXCLUSICE是不跟随,也就是SPAN_INCLUSIVE_EXCLUSIVE是指在指定范围前插入新字符的话,新字符也会使用指定的样式,而在指定范围后插入新字符则不会,实例看一下

EditText editText = findViewById(R.id.edit);
        SpannableString spannableString = new SpannableString("一二三四五");
        spannableString.setSpan(new ForegroundColorSpan(Color.RED), 2, 4, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        editText.setText(spannableString);
输入前 输入后

分别输入了四次,分别是"前","后","更后","更前",但是变色的只有前,由此可见SPAN_INCLUSIVE_EXCLUSIVE的作用,剩下的三个都是一样的用法。

这里参数就介绍完了,但是需要注意的是,setSpan方法的第一个参数,也就是样式,每次都要是新的对象,没用过的,如果是用过的话,就无效的了。那么现在就来看看SpannableString和SpannableStringBuilder的区别。

区别

SpannableString是必须要传入字符才能创建,而SpannableStringBuilder直接创建就可以,当然也可以传入字符,而且SpannableStringBuilder有append,insert,delete等方法,而且传入的是CharSequence,所以就是可以传SpannableString,可控性更好,当然,只操控一条字符,直接使用SpannableString就好了。

上一篇 下一篇

猜你喜欢

热点阅读