SpannableStringBuilder 笔

TextView官方加强版

0.介绍

  • SpannableStringBuilder
    可以拼接
  • SpannableString
    不可拼接

1.方法

改变文本样式
setSpan(Object what, int start, int end, int flags)

  • start:开始位置
  • end:结束位置,并不包括这个位置。
  • flags:取值有如下四个
  • Spannable.SPAN_EXCLUSIVE_INCLUSIVE:前面不应用效果,后面应用效果。
  • Spannable.SPAN_INCLUSIVE_EXCLUSIVE:前面应用效果,后面不应用效果。
  • Spannable.SPAN_INCUJSIVE_INCLUSIVE:前后应用效果。
  • Spannable.SPAN_EXCLUSIVE_EXCLUSIVE:前后都不包括。
  • what: 对应的各种Span,不同的Span对应不同的样式。已知的可用类有
  • BackgroundColorSpan : 文本背景色
  • ForegroundColorSpan : 文本颜色
  • MaskFilterSpan : 修饰效果,如模糊(BlurMaskFilter)浮雕
  • RasterizerSpan : 光栅效果
  • StrikethroughSpan : 删除线
  • SuggestionSpan : 相当于占位符
  • UnderlineSpan : 下划线
  • AbsoluteSizeSpan : 文本字体(绝对大小)
  • DynamicDrawableSpan : 设置图片,基于文本基线或底部对齐。
  • ImageSpan : 图片
  • RelativeSizeSpan : 相对大小(文本字体)
  • ScaleXSpan : 基于x轴缩放
  • StyleSpan : 字体样式:粗体、斜体等
  • SubscriptSpan : 下标(数学公式会用到)
  • SuperscriptSpan : 上标(数学公式会用到)
  • TextAppearanceSpan : 文本外貌(包括字体、大小、样式和颜色)
  • TypefaceSpan : 文本字体
  • URLSpan : 文本超链接
  • ClickableSpan : 点击事件

3.使用实战

1.TextView 超链接布局

drawabletv_link_selector.xml



    
    

2.TextView 布局

3.calss代码
/**
 * 大体功能测试
 */
private void test() {
    SpannableStringBuilder spsb = new SpannableStringBuilder("字体颜色。");
    spsb.append("爷是有背景的人。");
    spsb.append("爷说字体要大。");
    spsb.append("爷要粗!");
    spsb.append("葛优瘫了。");
    spsb.append("加粗版的葛优瘫。");
    spsb.append("加条删除线吧。");
    spsb.append("来条下划线。");
    spsb.append("图片");
    spsb.append("有本事点我试试。");

    // 设置--字体颜色
    ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#009ad6"));
    spsb.setSpan(colorSpan, 0, 5, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

    // 设置--背景颜色
    BackgroundColorSpan bgColorSpan = new BackgroundColorSpan(Color.parseColor("#009ad6"));
    spsb.setSpan(bgColorSpan, 5, 13, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

    // 设置--字体大小
    AbsoluteSizeSpan absoluteSizeSpan = new AbsoluteSizeSpan(50);
    spsb.setSpan(absoluteSizeSpan, 13, 20, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

    // 设置--粗体
    StyleSpan styleSpan = new StyleSpan(Typeface.BOLD);
    spsb.setSpan(styleSpan, 20, 24, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

    // 设置--斜体
    StyleSpan styleSpan2 = new StyleSpan(Typeface.ITALIC);
    spsb.setSpan(styleSpan2, 24, 29, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

    // 设置--粗斜体
    StyleSpan styleSpan3 = new StyleSpan(Typeface.BOLD_ITALIC);
    spsb.setSpan(styleSpan3, 29, 37, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

    // 设置--删除线
    StrikethroughSpan strikethroughSpan = new StrikethroughSpan();
    spsb.setSpan(strikethroughSpan, 37, 44, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

    // 设置--下划线
    UnderlineSpan underlineSpan = new UnderlineSpan();
    spsb.setSpan(underlineSpan, 44, 50, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

    // 设置--图片
    ImageSpan imageSpan = new ImageSpan(this, R.mipmap.ic_launcher);
    //也可以这样
    //Drawable drawable = getResources().getDrawable(R.mipmap.ic_launcher);
    //drawable.setBounds(0, 0, drawable.getIntrinsicWidth(), drawable.getIntrinsicHeight());
    //ImageSpan imageSpan1 = new ImageSpan(drawable);
    //将index为50-52的字符用图片替代
    spsb.setSpan(imageSpan, 50, 52, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

    // 设置--点击事件
    ClickableSpan cs = new ClickableSpan() {
        @Override
        public void onClick(View view) {
            Toast.makeText(MainActivity.this, "安倍这老狗。", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void updateDrawState(TextPaint ds) {
            // 超链接的文本颜色
            ds.setColor(Color.parseColor("#009ad6"));
            // 是否显示下划线
            ds.setUnderlineText(false);
            ds.clearShadowLayer();
        }
    };
    spsb.setSpan(cs, 52, 60, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);

    tv1.setText(spsb);
    // 设置--点击事件(相关)
    tv1.setMovementMethod(LinkMovementMethod.getInstance());
}

2017-1-5 15:15:49

你可能感兴趣的:(SpannableStringBuilder 笔)