这个工具类真是构思了良久才设计出来,采用了建造者模式,然后你们就可以用链式调用了,talk is cheap, let me show the demo.

demo

code

有没有心动一下哈,下面就让老司机为你们开路。

站点

  • SpannableString相关工具类→SpannableStringUtils.java→Demo

    getBuilder        : 获取建造者
    setFlag           : 设置标识
    setForegroundColor: 设置前景色
    setBackgroundColor: 设置背景色
    setQuoteColor     : 设置引用线的颜色
    setLeadingMargin : 设置缩进 setBullet : 设置列表标记 setProportion : 设置字体比例 setXProportion : 设置字体横向比例 setStrikethrough : 设置删除线 setUnderline : 设置下划线 setSuperscript : 设置上标 setSubscript : 设置下标 setBold : 设置粗体 setItalic : 设置斜体 setBoldItalic : 设置粗斜体 setFontFamily : 设置字体 setAlign : 设置对齐 setBitmap : 设置图片 setDrawable : 设置图片 setUri : 设置图片 setResourceId : 设置图片 setClickSpan : 设置点击事件 setUrl : 设置超链接 setBlur : 设置模糊 append : 追加样式字符串 create : 创建样式字符串

具体路线

package com.blankj.utilcode.utils;import android.graphics.Bitmap;
import android.graphics.BlurMaskFilter;
import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.net.Uri; import android.support.annotation.ColorInt; import android.support.annotation.DrawableRes; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.text.Layout.Alignment; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.style.AlignmentSpan; import android.text.style.BackgroundColorSpan; import android.text.style.BulletSpan; import android.text.style.ClickableSpan; import android.text.style.ForegroundColorSpan; import android.text.style.ImageSpan; import android.text.style.LeadingMarginSpan; import android.text.style.MaskFilterSpan; import android.text.style.QuoteSpan; import android.text.style.RelativeSizeSpan; import android.text.style.ScaleXSpan; import android.text.style.StrikethroughSpan; import android.text.style.StyleSpan; import android.text.style.SubscriptSpan; import android.text.style.SuperscriptSpan; import android.text.style.TypefaceSpan; import android.text.style.URLSpan; import android.text.style.UnderlineSpan; import static android.graphics.BlurMaskFilter.Blur; /** * <pre> * author: Blankj * blog : http://blankj.com * time : 16/12/13 * desc : SpannableString相关工具类 * </pre> */ public class SpannableStringUtils { private SpannableStringUtils() { throw new UnsupportedOperationException("u can't instantiate me..."); } /** * 获取建造者 * * @return {@link Builder} */ public static Builder getBuilder(@NonNull CharSequence text) { return new Builder(text); } public static class Builder { private int defaultValue = 0x12000000; private CharSequence text; private int flag; @ColorInt private int foregroundColor; @ColorInt private int backgroundColor; @ColorInt private int quoteColor; private boolean isLeadingMargin; private int first; private int rest; private boolean isBullet; private int gapWidth; private int bulletColor; private float proportion; private float xProportion; private boolean isStrikethrough; private boolean isUnderline; private boolean isSuperscript; private boolean isSubscript; private boolean isBold; private boolean isItalic; private boolean isBoldItalic; private String fontFamily; private Alignment align; private boolean imageIsBitmap; private Bitmap bitmap; private boolean imageIsDrawable; private Drawable drawable; private boolean imageIsUri; private Uri uri; private boolean imageIsResourceId; @DrawableRes private int resourceId; private ClickableSpan clickSpan; private String url; private boolean isBlur; private float radius; private Blur style; private SpannableStringBuilder mBuilder; private Builder(@NonNull CharSequence text) { this.text = text; flag = Spanned.SPAN_EXCLUSIVE_EXCLUSIVE; foregroundColor = defaultValue; backgroundColor = defaultValue; quoteColor = defaultValue; proportion = -1; xProportion = -1; mBuilder = new SpannableStringBuilder(); } /** * 设置标识 * * @param flag <ul> * <li>{@link Spanned#SPAN_INCLUSIVE_EXCLUSIVE}</li> * <li>{@link Spanned#SPAN_INCLUSIVE_INCLUSIVE}</li> * <li>{@link Spanned#SPAN_EXCLUSIVE_EXCLUSIVE}</li> * <li>{@link Spanned#SPAN_EXCLUSIVE_INCLUSIVE}</li> * </ul> * @return {@link Builder} */ public Builder setFlag(int flag) { this.flag = flag; return this; } /** * 设置前景色 * * @param color 前景色 * @return {@link Builder} */ public Builder setForegroundColor(@ColorInt int color) { this.foregroundColor = color; return this; } /** * 设置背景色 * * @param color 背景色 * @return {@link Builder} */ public Builder setBackgroundColor(@ColorInt int color) { this.backgroundColor = color; return this; } /** * 设置引用线的颜色 * * @param color 引用线的颜色 * @return {@link Builder} */ public Builder setQuoteColor(@ColorInt int color) { this.quoteColor = color; return this; } /** * 设置缩进 * * @param first 首行缩进 * @param rest 剩余行缩进 * @return {@link Builder} */ public Builder setLeadingMargin(int first, int rest) { this.first = first; this.rest = rest; isLeadingMargin = true; return this; } /** * 设置列表标记 * * @param gapWidth 列表标记和文字间距离 * @param color 列表标记的颜色 * @return {@link Builder} */ public Builder setBullet(int gapWidth, int color) { this.gapWidth = gapWidth; bulletColor = color; isBullet = true; return this; } /** * 设置字体比例 * * @param proportion 比例 * @return {@link Builder} */ public Builder setProportion(float proportion) { this.proportion = proportion; return this; } /** * 设置字体横向比例 * * @param proportion 比例 * @return {@link Builder} */ public Builder setXProportion(float proportion) { this.xProportion = proportion; return this; } 

转载于:https://www.cnblogs.com/wangfeng520/p/6213535.html

转:工具类之SpannableStringUtils(相信你会爱上它)相关推荐

  1. TextView显示不同颜色的文本,及文本变色可点击工具类

    1. 定义 SpannableStringBuilder SpannableStringBuilder builder = new SpannableStringBuilder(); 复制代码 2. ...

  2. AndroidUtils:Android开发不得不收藏的Utils工具类

    AndroidUtils Android开发不得不收藏的Utils 具体Demo使用参考开源github:AndroidUtilCode.本文只是稍微记录下方便查阅. Activity相关→Activ ...

  3. 史上最全的常用开发工具类收集Android

    API 银行卡管理 → BankCheck checkBankCard : 校验银行卡卡号是否合法 getBankCardCheckCode: 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验 ...

  4. 史上最全的开发工具类

    银行卡管理 → BankCheck checkBankCard : 校验银行卡卡号是否合法 getBankCardCheckCode: 从不含校验位的银行卡卡号采用 Luhm 校验算法获得校验位 ge ...

  5. java日期转化工具类

    package com.rest.ful.utils;import java.text.DateFormat; import java.text.ParseException; import java ...

  6. java数据类型相互转换工具类

    package com.rest.ful.utils;import java.util.ArrayList; import java.util.HashMap; import java.util.Li ...

  7. 客快物流大数据项目(五十六): 编写SparkSession对象工具类

    编写SparkSession对象工具类 后续业务开发过程中,每个子业务(kudu.es.clickhouse等等)都会创建SparkSession对象,以及初始化开发环境,因此将环境初始化操作封装成工 ...

  8. [JAVA EE] Thymeleaf 常用工具类

    Thymeleaf 提供了丰富的表达式工具类,例如: #strings:字符串工具类 #dates:时间操作和时间格式化 #numbers:格式化数字对象的方法 #bools:常用的布尔方法 #str ...

  9. httpclient工具类,post请求发送json字符串参数,中文乱码处理

    在使用httpclient发送post请求的时候,接收端中文乱码问题解决. 正文: 我们都知道,一般情况下使用post请求是不会出现中文乱码的.可是在使用httpclient发送post请求报文含中文 ...

  10. spring boot 文件上传工具类(bug 已修改)

    以前的文件上传都是之前前辈写的,现在自己来写一个,大家可以看看,有什么问题可以在评论中提出来. 写的这个文件上传是在spring boot 2.0中测试的,测试了,可以正常上传,下面贴代码 第一步:引 ...

最新文章

  1. Opencv4测试报错00007FFB3253A9C0 (ntdll.dll)处引发的异常: 0xC0000005: 读取位置 0x0000000000000010 时发生访问冲突
  2. 专家答题:GB50311-2007 常见问题
  3. cache-control_网站 cache control 最佳实践
  4. python爬虫分析大学排名_Python爬虫获得国内高校排名,python,获取,大学排名
  5. Flutter Text或者RichText不换行的问题
  6. netty系列之:自定义编码解码器
  7. 自己封装一个弹框插件
  8. 美团点评APP在移动网络性能优化的实践,吊打面试官系列!
  9. php的ob_flush和flush(转)
  10. [原创]全球首款不使用ViewState的Asp.Net2.0控件库
  11. 从“鸡兔同笼”到问题的奇思妙解
  12. python与java区别-Java与Python到底有什么区别和共同点详细对比
  13. 常用三端稳压管型号大全对照表
  14. ftp服务器搭建随手记
  15. html输入密码访问指定页面,三种方法使HTML单页面输入密码才能访问
  16. 模拟买一台计算机及装机心得,装机模拟器显卡及处理器超频影响因素分析 超频体验心得_游侠网...
  17. 2017.12.2 用java做一个日历
  18. 计算机又坏了,第二次回家
  19. linux lzma压缩
  20. 特征工程—数据哑变量(独热编码)

热门文章

  1. 干货|现代IM系统中消息推送和存储架构的实现
  2. 饿了么:日订单量超900万的架构设计及演进之路
  3. 4亿线上用户性能保证:Linked Redliner架构解密
  4. 说说携程准备推出的「3+2」工作模式。
  5. graphics java_Graphics
  6. *第十周*数据结构实践项目一【二叉树的链式存储算法库】
  7. BZOJ1468: Tree BZOJ3365: [Usaco2004 Feb]Distance Statistics 路程统计
  8. Struts2与Ajax数据交互
  9. postgresql 9.1 基于wal的 pitr 恢复
  10. 洛谷 P1962 斐波那契数列