美文网首页
Spannable设置TextView样式

Spannable设置TextView样式

作者: 仕囵弹 | 来源:发表于2019-08-07 14:13 被阅读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

    • TypefaceSpan

      这是设置字体样式

      在构造方法的注释里有三种样式,monospace,serif和sans-serif

      但是中文好像没变化,哈哈哈,英文字母的话还是看得出有不一样的

    • AbsoluteSizeSpan

      这是设置字体大小,绝对大小

      参入参数就是绝对大小的值

    • RelativeSizeSpan

      这是也是设置字体的大小,不过是相对大小

      就是传参为2,就是原来的2倍

    • ForegroundColorSpan

      字体前景色,也就是字体颜色

      参数是颜色值

    • BackgroundColorSpan

      字体背景色

      参数也是颜色值

    • StyleSpan

      字体的样式,例如粗体,斜体

      参数是Typeface的常量值NORMAL,BOLD_ITALIC,BOLD和ITALIC

      这几个参数很好理解,第一个是默认值,第二个是加粗斜体,第三个是加粗,第四个是斜体

    • UnderlineSpan

      加下划线

      这里重写updateDrawState方法,根据TextPaint参数可以自己设置是否显示下划线,还有可以设置字体颜色之类的

    • StrikethroughSpan

      加删除线

      同样重写updateDrawState方法,可以设置的

    • SuperscriptSpan

      上标

    • SubscriptSpan

      下标

    • ClickableSpan

      点击事件

      给指定范围的字符设置点击事件

      默认的设置完会有下滑线的,如果不想要就重写updateDrawState方法就好了

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

    flags

    • SPAN_INCLUSIVE_EXCLUSIVE
    • SPAN_INCLUSIVE_INCLUSIVE
    • SPAN_EXCLUSIVE_EXCLUSIVE
    • SPAN_EXCLUSIVE_INCLUSIVE

    其实这几个都很好理解,可以是这样理解,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就好了。

    相关文章

      网友评论

          本文标题:Spannable设置TextView样式

          本文链接:https://www.haomeiwen.com/subject/oquodctx.html