美文网首页Android开发经验谈Android开发Android开发
关于TextView 富文本 的简单叙述。

关于TextView 富文本 的简单叙述。

作者: 夏沐尧 | 来源:发表于2017-03-31 11:02 被阅读102次

    示例:


    123.png

    简单来说就是可以在一个TextView中的部分文字实现点击事件,更换颜色,添加图片什么的,在这之前参考了这个:http://blog.coryphaei.com/2016/01/11/%E4%B8%80%E4%B8%AA%E7%AE%80%E5%8D%95%E7%9A%84Android%E5%AF%8C%E6%96%87%E6%9C%ACTextView%E5%AE%9E%E7%8E%B0/

    SpannableStringBuilder:

    基本概念
    SpannableStringBuilder 和 StringBuilder类似,都可以存储字符串,不同的是SpannableStringBuilder有一个setSpan()函数,可以给存储的String添加不同的样式。如加下划线、背景色、字体颜色、字体大小等。
    另外需要注意的是,当SpannableStringBuilder中存储了一个有样式的String,当把spannableStringBuilder展示在TextView、EditTextView中时,能显示这些样式;当展示在canvas上时,因为Canvas不支持SpannableStringBuilder的额外信息,所以会退化成一个普通的String,不显示样式信息。

    setSpan()函数

    void setSpan(Object what,int startIndex,int endIndex,int flag);
    说明:

    参数    说明
    Object   what         设置Span样式
    int      startIndex 样式开始的Index
    int      endIndex      样式结束的Index
    int      flag         新插入字符的样式设置
    

    注意点:

    endIndex:字体样式结束的Index,该Index对应的字符不使用样式,比如有一个字符串为s = “abcd”,s.setSpan(span,0,2,flag),此时第0、1个字符ab使用了样式span,endIndex对应的字符c不使用。
    flag:取值如下

    
    取值                                说明
    Spannable.SPAN_EXCLUSIVE_EXCLUSIVE  前后都不包括,即在指定范围的前面和后面插入新字符都不会应用新样式
    Spannable.SPAN_EXCLUSIVE_INCLUSIVE  前面不包括,后面包括。即仅在范围字符的后面插入新字符时会应用新样式
    Spannable.SPAN_INCLUSIVE_EXCLUSIVE  前面包括,后面不包括。
    Spannable.SPAN_INCLUSIVE_INCLUSIVE  前后都包括
    

    简单示例

    //设置字体颜色
    textview1 = (TextView) findViewById(R.id.text1);
    SpannableStringBuilder spannableStringBuilder1 = new SpannableStringBuilder("Android");
    ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.BLUE);
    spannableStringBuilder1.setSpan(foregroundColorSpan, 0, 3, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
    textview1.setText(spannableStringBuilder1);
    

    点击事件

    SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder("Android");
    
    spannableStringBuilder.setSpan(
        new ClickableSpan() {
            @Override
            public void onClick(View widget) {
                //do something
            }
    
            @Override
            public void updateDrawState(TextPaint ds) {
                //设置一些样式
                //ds.setUnderlineText(false);
                //ds.setColor(color);
            }
        }, startIndex, endIndex,
        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
    );
    

    附上自己当时写的一个页面Demo 自用
    http://download.csdn.net/detail/u014748864/9800224

    相关文章

      网友评论

        本文标题:关于TextView 富文本 的简单叙述。

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