SpannableString  修改指定字体颜色,用在协议方面, 给字体添加下划线,删除线,等功能 。

setSpan(Object what, int start, int end, int flags)方法需要用户输入四个参数,what表示设置的格式是什么,可以是前景色、背景色也可以是可点击的文本等等,start表示需要设置格式的子字符串的起始下标,同理end表示终了下标,flags属性就有意思了,共有四种属性:

Spanned.SPAN_INCLUSIVE_EXCLUSIVE 从起始下标到终了下标,包括起始下标
Spanned.SPAN_INCLUSIVE_INCLUSIVE 从起始下标到终了下标,同时包括起始下标和终了下标
Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 从起始下标到终了下标,但都不包括起始下标和终了下标
Spanned.SPAN_EXCLUSIVE_INCLUSIVE 从起始下标到终了下标,包括终了下标

SpannableString的setSpan()方法可以同时使用多个,实现多种效果叠加。

span常见的功能

  • ForegroundColorSpan:前景色
  • BackgroundColorSpan:背景色
  • ClickableSpan:抽象类,可点击效果,重写onClick方法响应点击事件
  • URLSpan:超链接
  • MaskFilterSpan:EmbossMaskFilter浮雕效果,BlurMaskFilter模糊效果
  • RelativeSpan:文字相对大小
  • AbsoluteSpan:文字绝对大小
  • ScaleXSpan:x轴缩放
  • styleSpan:文字样式
  • TypefaceSpan:文字字体类型
  • TextApearanceSpan:文字外貌
  • UnderlineSpan:下划线
  • StrikeThroughSpan:删除线
  • SuperscriptSpan:上标
  • SubscriptSpan:下标
  • ImageSpan:图片

实现 指定字体颜色之改变

        SpannableString spannableString = new SpannableString("仅售:26元");ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.parseColor("#FF0000"));spannableString.setSpan(foregroundColorSpan,3,5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);textView.setText(spannableString);

效果图

现在把价格文字变大

        SpannableString spannableString = new SpannableString("仅售:26元");ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.parseColor("#FF0000"));RelativeSizeSpan sizeSpan = new RelativeSizeSpan(3f);spannableString.setSpan(foregroundColorSpan,3,5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);spannableString.setSpan(sizeSpan,3,5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);textView.setText(spannableString);

效果图

在给价格设置一个背景颜色

SpannableString spannableString = new SpannableString("仅售:26元");ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.parseColor("#FF0000"));RelativeSizeSpan sizeSpan = new RelativeSizeSpan(3f);BackgroundColorSpan colorSpan = new BackgroundColorSpan(Color.parseColor("#00d8a0"));spannableString.setSpan(foregroundColorSpan,3,5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);spannableString.setSpan(sizeSpan,3,5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);spannableString.setSpan(colorSpan,3,5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);

效果图

给价格添加一个下划线

 SpannableString spannableString = new SpannableString("仅售:26元");ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.parseColor("#FF0000"));RelativeSizeSpan sizeSpan = new RelativeSizeSpan(3f);BackgroundColorSpan colorSpan = new BackgroundColorSpan(Color.parseColor("#00d8a0"));UnderlineSpan underlineSpan = new UnderlineSpan();spannableString.setSpan(foregroundColorSpan,3,5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);spannableString.setSpan(sizeSpan,3,5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);spannableString.setSpan(colorSpan,3,5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);spannableString.setSpan(underlineSpan,3,5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);

效果图

给价格添加一个删除线

        SpannableString spannableString = new SpannableString("仅售:26元");ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.parseColor("#FF0000"));RelativeSizeSpan sizeSpan = new RelativeSizeSpan(3f);BackgroundColorSpan colorSpan = new BackgroundColorSpan(Color.parseColor("#00d8a0"));UnderlineSpan underlineSpan = new UnderlineSpan();StrikethroughSpan strikethroughSpan = new StrikethroughSpan();spannableString.setSpan(foregroundColorSpan,3,5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);spannableString.setSpan(sizeSpan,3,5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);spannableString.setSpan(colorSpan,3,5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);spannableString.setSpan(underlineSpan,3,5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);spannableString.setSpan(strikethroughSpan,3,5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);

效果图

给价格设置一个点击事件

 SpannableString spannableString = new SpannableString("仅售:26元");ForegroundColorSpan foregroundColorSpan = new ForegroundColorSpan(Color.parseColor("#FF0000"));RelativeSizeSpan sizeSpan = new RelativeSizeSpan(3f);BackgroundColorSpan colorSpan = new BackgroundColorSpan(Color.parseColor("#00d8a0"));UnderlineSpan underlineSpan = new UnderlineSpan();StrikethroughSpan strikethroughSpan = new StrikethroughSpan();ClickableSpan clickableSpan = new ClickableSpan() {@Overridepublic void onClick(View widget) {Toast.makeText(ThreeActivity.this, "点击了价格", Toast.LENGTH_SHORT).show();}};spannableString.setSpan(foregroundColorSpan,3,5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);spannableString.setSpan(sizeSpan,3,5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);spannableString.setSpan(colorSpan,3,5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);spannableString.setSpan(underlineSpan,3,5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);spannableString.setSpan(strikethroughSpan,3,5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);spannableString.setSpan(clickableSpan,3,5, Spanned.SPAN_INCLUSIVE_INCLUSIVE);textView.setMovementMethod(LinkMovementMethod.getInstance());textView.setText(spannableString);

需要注意的是设置点击事件的时候 在textview.setText 之前需要使用

setMovementMethod()方法否则点击无效果。。。。

Android SpannableString 给TextView 设置颜色,删除线等相关推荐

  1. Android动态改变TextView字体颜色

    Android动态改变TextView字体颜色 分类: Android 2012-06-04 21:56 141人阅读 评论(0) 收藏 举报 androidcolorslayout 必须在在res/ ...

  2. Android: 在 TextView 里使用删除线

    以编程的方式添给 TextView 添加删除线: textview.getPaint().setFlags(Paint.STRIKE_THRU_TEXT_FLAG); 顺便研究下: TextView. ...

  3. 给TextView设置颜色选择器selector

    在项目中遇到一种情形,一个TextView如果可以点击-文字颜色为黑色,当点击以后就变为不可点击-文字颜色为蓝色. 然后当然是选择selector了, <selector xmlns:andro ...

  4. Android Studio中如何设置颜色拾色器工具

    Android Studio如何设置颜色拾色器工具Color Picker? 你可能下载过一些获取颜色值的一些小工具, 这种方式获取颜色,需要先切换窗口转跳到桌面,然后打开拾色器小工具程序,然后去拾取 ...

  5. Android基础篇 TextView 设置行间距字间距

    一.行间距 TextView 设置行间距可以通过设置TextView属性的 android:lineSpacingExtra 或 android:lineSpacingMultiplier 来达到效果 ...

  6. android设置字体滚动,Android开发:TextView设置字体横向滚动

    最近项目中遇到textview中文字显示不全的问题,由于界面设计原因,textview只能占比一定的宽度.基于以上情况,查找了一下textview的属性,强大的textview居然可以设置字体滚动,于 ...

  7. android 颜色设置透明度,android端如何实现设置颜色透明度?

    AngularJS 系列 02 - 模块 引导目录: AngularJS 系列 学习笔记 目录篇 前言: 其实,在上篇文章介绍数据绑定的时候,我们的HelloWorld的代码案例中就已经使用了模块(m ...

  8. Android SpannableString详细解析

    可以看出所有Span都继承于CharacterStyle这个抽象类,另外MetricAffectingSpan.ReplacementSpan和ClickableSpan都是抽象类,下面展示一些常用的 ...

  9. android+设置字体行高,TextView设置行间距、行高,以及字间距

    一. 设置TextView行间距.行高: Android系统中TextView有默认行间距,但是比较窄有的时候需要我们设置每行行间距. TextView为我们提供了相关设置属性android:line ...

最新文章

  1. ha-2:read-project-properties (default) on project
  2. iPhone Three20软件引擎之构建开发环境与HelloWorld
  3. 链接器ld程序的脚本文件u-boot.lds(二)
  4. 腾云驾雾的计算,让你蒙圈了么?
  5. mysql8和5.7区别_MySQL 8、MySQL 5.7和Percona server for MySQL性能比较
  6. elementui可编辑单元格_ElementUI table组件实现点击单元格可编辑
  7. php fsockopen 异步,异步执行PHP任务fsockopen的干货
  8. hive使用适用场景_ 如何将Hive与HBase整合联用
  9. 数据库实验一:创建数据库和表
  10. SQLMap常用命令介绍
  11. Android Lolipop AssetAtlasService引起的系统崩溃
  12. 【成功入坑-利用Python进行数据分析·第2版】第一章:准备工作(Preliminaries)
  13. 视频大数据与物联网(IoT)融合发展的探索
  14. rxjava背压_Android RxJava :图文详解 背压策略
  15. iOS 开源项目(一)
  16. Android常见的问题
  17. 各种注释-注释多行与取消多行注释快捷键
  18. 大数据应用在医疗行业的5个经典案例
  19. 微机原理知识点总结10-12
  20. 19.Atomic系列之LongAdder的底层原理(分段锁提升并发性能)

热门文章

  1. nginx配置http、https访问,nginx指定ssl证书,阿里云腾讯云华为云设置nginx https安全访问
  2. 2021-2027年中国医疗旅游业投资分析及前景预测报告
  3. Docker compose 容器编排
  4. Plotly_绘图画图作图交互
  5. pytorch 动态调整学习率 重点
  6. 初学MyBatis-Plus
  7. 合肥工业大学—SQL Server数据库实验五:创建和删除索引
  8. 分离内核和虚拟机支持安全的关键任务边缘计算
  9. Java List与ArrayList 的区别(List list =new Arraylist(); ArrayList<String> arrayList = new ArrayList())
  10. Android Handler sendMessage和 sendMessageDelayed的使用