安卓SpannableString之富文本显示效果

这个API一直没有记,写个记录下,方便下次用的时候直接复制就好!

先简单下说下setSpan(Object what, int start, int end, int flags)这个参数,就是指定你起始和结束的包含不包含,简单理解开闭区间的意思

Spanned.SPAN_INCLUSIVE_EXCLUSIVE
包含起始坐标,不包含结束===>数学符号表示:[start,end)

Spanned.SPAN_INCLUSIVE_INCLUSIVE	
包含起始坐标,包含结束===>数学符号表示:[start,end]

Spanned.SPAN_EXCLUSIVE_EXCLUSIVE
不包含起始坐标,不包含结束===>数学符号表示:(start,end)

Spanned.SPAN_EXCLUSIVE_INCLUSIVE
不包含起始坐标,包含结束===>数学符号表示:(start,end]

INCLUSIVE就是包含,EXCLUSIVE就是不包含

话不多说:上代码,需要什么样式直接搜就完事了
在这里插入图片描述

		//创建一个 SpannableString对象
        SpannableString spannableString = new SpannableString("字体测试1字体测试2字体测试3文本像素文本DP文本一半文本两倍前景色背景色正常粗体斜体粗斜体下划线删除线文本上标文本下标文本 (图片)表情电话-邮件-网址-短信-彩信-地图");
        //设置字体 我是没看出来效果("monospace", "serif", "sans-serif")
        spannableString.setSpan(new TypefaceSpan("monospace"), 0, 5, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        spannableString.setSpan(new TypefaceSpan("serif"), 5, 10, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        spannableString.setSpan(new TypefaceSpan("sans-serif"), 10, 15, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        //设置字体大小(绝对值 单位:像素)
        spannableString.setSpan(new AbsoluteSizeSpan(24), 15, 19, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        //第二个参数是否是 dip,如果为true,表示前面的字体大小单位为dip,否则为像素,同上。
        spannableString.setSpan(new AbsoluteSizeSpan(24, true), 19, 23, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        //0.5f 表示默认字体大小的一半
        spannableString.setSpan(new RelativeSizeSpan(0.5f), 23, 27, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        //2.0f 表示默认字体大小的两倍
        spannableString.setSpan(new RelativeSizeSpan(2.0f), 27, 31, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        //设置字体前景色(就是字体颜色)
        spannableString.setSpan(new ForegroundColorSpan(Color.MAGENTA), 31, 34, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        //设置字体背景色为青色
        spannableString.setSpan(new BackgroundColorSpan(Color.CYAN), 34, 37, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        //设置字体样式为正常
        spannableString.setSpan(new StyleSpan(android.graphics.Typeface.NORMAL), 37, 39, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        //设置字体样式为粗体
        spannableString.setSpan(new StyleSpan(android.graphics.Typeface.BOLD), 39, 41, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        //设置字体样式为斜体
        spannableString.setSpan(new StyleSpan(android.graphics.Typeface.ITALIC), 41, 43, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        //设置字体样式为粗斜体
        spannableString.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC), 43, 46, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        //设置下划线
        spannableString.setSpan(new UnderlineSpan(), 46, 49, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        //设置删除线
        spannableString.setSpan(new StrikethroughSpan(), 49, 52, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        //设置上标
        spannableString.setSpan(new SuperscriptSpan(), 54, 56, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        //设置下标
        spannableString.setSpan(new SubscriptSpan(), 58, 60, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        //设置图标图片表情
        Drawable drawable = getResources().getDrawable(R.mipmap.emoji);
        drawable.setBounds(0, 0, 80, 80);
        spannableString.setSpan(new ImageSpan(drawable), 62, 63, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);
        //超级链接(注意:需要添加setMovementMethod方法附加响应)
        //电话
        spannableString.setSpan(new URLSpan("tel:12345678900"), 69, 71, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //邮件
        spannableString.setSpan(new URLSpan("mailto:ealge.py@xxx.com"), 72, 74, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //网络
        spannableString.setSpan(new URLSpan("https://www.baidu.com/"), 75, 77, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //短信   使用sms:或者smsto:
        spannableString.setSpan(new URLSpan("sms:12345678901"), 78, 80, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //彩信   使用mms:或者mmsto:
        spannableString.setSpan(new URLSpan("mms:12345678902"), 81, 83, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        //地图
        spannableString.setSpan(new URLSpan("geo:121.484848,31.222222"), 84, 86, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
        mTvTest.setText(spannableString);
        mTvTest.setMovementMethod(LinkMovementMethod.getInstance());

        //最后附上直接对Textview的常用样式修改(主要用于商城类项目)
//        mTvTest.getPaint().setFlags(Paint.UNDERLINE_TEXT_FLAG); //下划线
//        mTvTest.getPaint().setAntiAlias(true);//抗锯齿
//        mTvTest.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); //中划线
//        mTvTest.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG | Paint.ANTI_ALIAS_FLAG); // 设置中划线并加清晰
//        mTvTest.getPaint().setFlags(0); // 取消设置的的划线

有用点个赞,欢迎转发(转发请标明出处)?。。。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值