前言

通过大牛 泡在网上的日子  的文章学习到了SpannableStringBuilder的用法,通过SpannableStringBuilder定制textView的文本样式,以前有这样的需求的时候只会傻傻的将文字分成几个textView显示或者用html控制。现在用SpannableStringBuilder解决简直太perfect了。

主要的方法

       SpannableStringBuilderSpannableString主要通过使用setSpan(Object what, int start, int end, int flags)改变文本样式。
对应的参数:

  • start: 指定Span的开始位置

  • end: 指定Span的结束位置,并不包括这个位置。

  • flags:取值有如下四个

    • Spannable.SPAN_EXCLUSIVE_INCLUSIVE:在 Span前面输入的字符不应用 Span的效果,在后面输入的字符应用Span效果。

    • Spannable.SPAN_INCLUSIVE_EXCLUSIVE:在 Span前面输入的字符应用 Span 的效果,在后面输入的字符不应用Span效果。

    • Spannable.SPAN_INCUJSIVE_INCLUSIVE:在 Span前后输入的字符都应用 Span 的效果。

    • 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 : 点击事件

代码示例

SpannableString
/** * 使用SpannableString设置样式——字体颜色 */SpannableString spannableString = new SpannableString("hello world");ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#009ad6"));spannableString.setSpan(colorSpan, 0, 5, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);//设置'hello'的字体颜色((TextView)findViewById(R.id.textView)).setText(spannableString);

SpannableStringBuilder
SpannableStringBuilder ssb=new SpannableStringBuilder();ssb.append("hello world");/** * 设置样式——字体颜色 */ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#009ad6"));ssb.setSpan(colorSpan, 0, 3, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);//设置'hel'颜色//设置背景颜色BackgroundColorSpan bgColorSpan = new BackgroundColorSpan(Color.parseColor("#009ad6"));ssb.setSpan(bgColorSpan, 3, 6, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);//'lo '的背景色//设置字体大小AbsoluteSizeSpan absoluteSizeSpan = new AbsoluteSizeSpan(20);ssb.setSpan(absoluteSizeSpan, 0, 3, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);/** * 设置样式——粗体斜体 * Typeface. BOLD 粗体\ITALIC 斜体\BOLD_ITALIC 粗斜体 */StyleSpan styleSpan=new StyleSpan(Typeface.BOLD);ssb.setSpan(styleSpan, 0, 3, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);//'hel'设置为粗体//删除线-中划线StrikethroughSpan strikethroughSpan = new StrikethroughSpan();ssb.setSpan(strikethroughSpan, 0, 5, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);//下划线UnderlineSpan underlineSpan = new UnderlineSpan();ssb.setSpan(underlineSpan, 6, 8, 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为6、7的字符用图片替代ssb.setSpan(imageSpan, 6, 8, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);/** * 点击事件 */ClickableSpan clickableSpan = new ClickableSpan() {    @Override    public void onClick(View view) {        Toast.makeText(MainActivity.this, "hello", Toast.LENGTH_SHORT).show();    }};ssb.setSpan(clickableSpan, 5, 8, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);TextView textView = (TextView)findViewById(R.id.textView);textView.setText(ssb);textView.setMovementMethod(LinkMovementMethod.getInstance());//设置指定字符可点击,其他区域不可点击


更多相关文章

  1. 在Eclipse中设置Android模拟器屏幕大小
  2. android中setOnClickListener的那点事
  3. Android:窗口的Flag设置作用
  4. android中创建XML
  5. Android(安卓)自定义控件之第二讲:TypedArray 详解
  6. Android中MQTT的简单实现(只是连接到服务器,未实现发送、接受信息)
  7. android下eclipse中的Logcat 查看system.out.print()输出设置
  8. android libs下的源码和文档配置
  9. Android(安卓)WebSettings设置

随机推荐

  1. 如何在Windows中运行多个MySQL实例详解
  2. mysql随机抽取一定数量的记录实例讲解
  3. 当Mysql行锁遇到复合主键与多列索引详解
  4. Centos7系统下Mysql主从同步配置方案
  5. MySQL如何选择合适的索引
  6. mysql类似oracle rownum写法实例详解
  7. mysql如何比对两个数据库表结构的方法
  8. MySQL查看数据库表容量大小的方法示例
  9. sql 流水号获取代码实例
  10. MySQL修改root密码的4种方法(小结)