如何使用SpannableString自定义文本样式

//显示的内容
SpannableStringBuilder mBuilder = new SpannableStringBuilder();
//SpannableString的setSpan(Object what, int start, int end, int flags)
//what:样式,即:文字颜色、背景颜色、可点击的文本等等
//start:生效的字符起始下标
//end:生效的字符结束下标
//flags:共有4个设置如下
//Spanned.SPAN_INCLUSIVE_EXCLUSIVE 从起始下标到终了下标,包括起始下标
//Spanned.SPAN_INCLUSIVE_INCLUSIVE 从起始下标到终了下标,同时包括起始下标和结束下标
//Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 从起始下标到终了下标,但都不包括起始下标和结束下标
//Spanned.SPAN_EXCLUSIVE_INCLUSIVE 从起始下标到终了下标,包括结束下标
//1.给文字设置颜色(Color.parseColor("#1C86EE"))
SpannableString spannableString1 =
        new SpannableString("给文字设置颜色(Color.parseColor(\"#1C86EE\"))");//设置内容
spannableString1.setSpan(
        new ForegroundColorSpan(Color.parseColor("#1C86EE")),//设置样式
        0,
        spannableString1.length(),
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mBuilder.append(spannableString1);//累加字符串
mBuilder.append("\n");//添加换行

//2.给文本添加下划线
SpannableString spannableString2 = new SpannableString("给文本添加下划线");//设置内容
spannableString2.setSpan(
        new UnderlineSpan(),//设置样式
        0,
        spannableString2.length(),
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mBuilder.append(spannableString2);//累加字符串
mBuilder.append("\n");//添加换行

//3.给文本添加删除线
SpannableString spannableString3 = new SpannableString("给文本添加删除线");//设置内容
spannableString3.setSpan(
        new StrikethroughSpan(),//设置样式
        0,
        spannableString3.length(),
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mBuilder.append(spannableString3);//累加字符串
mBuilder.append("\n");//添加换行

//4.将文本设置为斜体
SpannableString spannableString4 = new SpannableString("将文本设置为斜体");//设置内容
spannableString4.setSpan(
        new StyleSpan(Typeface.ITALIC),//粗体则为Typeface.BOLD
        0,
        spannableString4.length(),
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mBuilder.append(spannableString4);//累加字符串
mBuilder.append("\n");//添加换行

//5.设置文字颜色(Color.BLUE)
SpannableString spannableString5 = new SpannableString("设置文字颜色(Color.BLUE)");//设置内容
spannableString5.setSpan(
        new ForegroundColorSpan(Color.BLUE),//设置样式
        0,
        spannableString5.length(),
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mBuilder.append(spannableString5);//累加字符串
mBuilder.append("\n");//添加换行

//6.设置背景色
SpannableString spannableString6 = new SpannableString("设置背景色");//设置内容
spannableString6.setSpan(
        new BackgroundColorSpan(Color.parseColor("#1C86EE")),//设置样式
        0,
        spannableString6.length(),
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mBuilder.append(spannableString6);//累加字符串
mBuilder.append("\n");//添加换行

//7.设置文字大小为大2倍
SpannableString spannableString7 = new SpannableString("设置文字大小为大2倍");//设置内容
spannableString7.setSpan(
        new RelativeSizeSpan(2f),//new ScaleXSpan(3.0f)设置水平方向上放大3倍
        0,
        spannableString7.length(),
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mBuilder.append(spannableString7);//累加字符串
mBuilder.append("\n");//添加换行

//8.给文字设置上标
SpannableString spannableString8 = new SpannableString("给文字设置上标");//设置内容
spannableString8.setSpan(
        new SuperscriptSpan(),//设置样式(设置下标:new SubscriptSpan())
        3,
        spannableString8.length(),
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mBuilder.append(spannableString8);//累加字符串
mBuilder.append("\n");//添加换行

//9.给文字添加图片
SpannableString spannableString9 = new SpannableString("给文字添加图片:。");//设置内容
Drawable drawable = ContextCompat.getDrawable(MainActivity.this,R.mipmap.ic_launcher);
drawable.setBounds(0, 0, 42, 42);
ImageSpan imageSpan = new ImageSpan(drawable);
spannableString9.setSpan(
        imageSpan,
        spannableString9.length()-2, spannableString9.length(),
        Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
mBuilder.append(spannableString9);//累加字符串
mBuilder.append("\n");//添加换行

//10.给文字设置点击事件(点击效果还需要TexeView对象设置setMovementMethod才能响应点击事件)
SpannableString spannableString10 = new SpannableString("给文字设置点击事件");//设置内容
spannableString10.setSpan(
        new ClickableSpan() {
            @Override
            public void updateDrawState(TextPaint ds) {
                super.updateDrawState(ds);
                ds.setColor(Color.BLUE);       //设置文件颜色
                ds.setUnderlineText(true);      //设置下划线
            }
            @Override
            public void onClick(View widget) {
                Toast.makeText(MainActivity.this,"点击事件",Toast.LENGTH_LONG).show();
            }
        },//设置样式
        0,
        spannableString10.length(),
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mBuilder.append(spannableString10);//累加字符串
mBuilder.append("\n");//添加换行

//11.给文字设置超链接(点击效果还需要TexeView对象设置setMovementMethod才能响应点击事件)
SpannableString spannableString11 = new SpannableString("给文字设置超链接");//设置内容
spannableString11.setSpan(
        new URLSpan("http://blog.csdn.net/u014608071"),//设置样式
        0,
        spannableString11.length(),
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mBuilder.append(spannableString11);//累加字符串
mBuilder.append("\n");//添加换行

//12.给文字添加垂直的引用线
SpannableString spannableString12 = new SpannableString("给文字添加垂直的引用线");//设置内容
spannableString12.setSpan(
        new QuoteSpan(Color.RED),//设置样式
        0,
        spannableString12.length(),
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mBuilder.append(spannableString12);//累加字符串
mBuilder.append("\n");//添加换行

//13.居中对齐的段落
SpannableString spannableString13 = new SpannableString("居中对齐的段落");//设置内容
spannableString13.setSpan(
        new AlignmentSpan.Standard(Layout.Alignment.ALIGN_CENTER),//设置样式
        0,
        spannableString13.length(),
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mBuilder.append(spannableString13);//累加字符串
mBuilder.append("\n");//添加换行

//14.设置serif family
SpannableString spannableString14 = new SpannableString("设置serif family");//设置内容
spannableString14.setSpan(
        new TypefaceSpan("serif"),//设置样式
        0,
        spannableString14.length(),
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mBuilder.append(spannableString14);//累加字符串
mBuilder.append("\n");//添加换行

//15.通过style.xml的配置设置文字
SpannableString spannableString15 = new SpannableString("通过style.xml的配置设置文字");//设置内容
spannableString15.setSpan(
        new TextAppearanceSpan(MainActivity.this, R.style.SpecialTextAppearance),//设置样式
        0,
        spannableString15.length(),
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mBuilder.append(spannableString15);//累加字符串
mBuilder.append("\n");//添加换行
//

//16.设置文字大小为24dp size: 大小dip:false,size单位为px,true,size单位为dip(默认为false)
SpannableString spannableString16 = new SpannableString("设置文字大小为24dp");//设置内容
spannableString16.setSpan(
        new AbsoluteSizeSpan(24, true),//设置样式
        0,
        spannableString16.length(),
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mBuilder.append(spannableString16);//累加字符串
mBuilder.append("\n");//添加换行

//17.模糊字符集(BlurMaskFilter不支持硬件加速)
SpannableString spannableString17 = new SpannableString("模糊字符集(BlurMaskFilter不支持硬件加速)");//设置内容
spannableString17.setSpan(
        new MaskFilterSpan(new BlurMaskFilter(1f, BlurMaskFilter.Blur.NORMAL)),//设置样式
        0,
        spannableString17.length(),
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mBuilder.append(spannableString17);//累加字符串
mBuilder.append("\n");//添加换行

//18.浮雕字符集(BlurMaskFilter不支持硬件加速)
SpannableString spannableString18 = new SpannableString("浮雕字符集(BlurMaskFilter不支持硬件加速)");//设置内容
spannableString18.setSpan(
        new MaskFilterSpan(new EmbossMaskFilter(new float[] { 1, 1, 1 }, 0.4f, 6, 3.5f)),//设置样式
        0,
        spannableString18.length(),
        Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
mBuilder.append(spannableString18);//累加字符串


tv_main_hell.setText(mBuilder);
tv_main_hell.setMovementMethod(LinkMovementMethod.getInstance());//开始响应点击事件

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值