如果想单独设置TextView上其中几个字的样式,该怎么办?

答案是使用SpannableString。
使用SpannableString可以为TextView上的某字或某些字设置:
前景色(ForegroundColorSpan)、
背景色(BackgroundColorSpan)、
设置字体(TypefaceSpan)、
点击事件(ClickableSpan)、
设置掩码(MaskFilterSpan)、
删除线效果(StrikethroughSpan)、
下划线效果(UnderlineSpan)、
插入图片(ImageSpan)等
想要实现自定义的样式,查看这个文档:
1. 简单示例
设置文字的前景色

1 SpannableString name = new SpannableString("abc");

 ForegroundColorSpan nameSpan = new ForegroundColorSpan(Color.BLUE);
 name.setSpan(nameSpan, 0, name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 textView.setText(name);
2. 使用SpannableStringBuilder构造复杂的样式
例如,我们写一个聊天程序,需要将用户名设置成绿色,将聊天内容设置成红色,可以这么干:
 1 SpannableStringBuilder spanBuilder = new SpannableStringBuilder();
 2 // name
 3 SpannableString name = new SpannableString("name");
 4 ForegroundColorSpan nameSpan = new ForegroundColorSpan(Color.BLUE);
 5 name.setSpan(nameSpan, 0, name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 6 spanBuilder.append(name);
 7 
 8 // msg
 9 SpannableString msg = new SpannableString("msg");
 ForegroundColorSpan msgSpan = new ForegroundColorSpan(Color.RED);
 msg.setSpan(msgSpan, 0, msg.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 spanBuilder.append(msg);
 

14 textView.setText(spanBuilder);

3. 插入图片
 // image
 SpannableString image = new SpannableString("image");
 ImageSpan imageSpan = new ImageSpan(ctx, imageResourceId, DynamicDrawableSpan.ALIGN_BASELINE);
 image.setSpan(imageSpan, 0, image.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 
 textView.setText(image);

4. 为文字设置点击事件

如果我们需要问某个字或某几个字设置点击事件,可以这么干:
 1 // name
 2 ClickableSpan clickSpan = new ClickableSpan() {
 3 
 4 @Override
 5  public void onClick(View widget) {
 6     Toast.makeText(context, "clickspan",  Toast.LENGTH_LONG).show();
 7  }
 8  @Override
 9  public void updateDrawState(TextPaint ds) {
    super.updateDrawState(ds);
    // 去掉下划线
    ds.setUnderlineText(false);
 
    // 设置文字颜色
    ds.setColor(Color.BLUE);
  }
 };
 
 SpannableString name = new SpannableString(cmd.srcName() + ":");
 name.setSpan(clickSpan, 0, name.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
 

22 textView.setText(name);

注意默认状态下,TextView不会响应点击事件,还需要这么设置一下:
 txtView.setMovementMethod(LinkMovementMethod.getInstance());

android-tip-关于SpannableString的使用的更多相关文章

  1. Android :TextView使用SpannableString设置复合文本

    TextView通常用来显示普通文本,但是有时候需要对其中某些文本进行样式.事件方面的设置.Android系统通过SpannableString类来对指定文本进行相关处理,具体有以下功能: 1.Bac ...

  2. Android学习之——SpannableString和TextView的使用及研究

    前言 相信大家对Android的TextView的使用已经相当熟悉了,但有没有发现TextView的文字总是那么单调,可以修改的就字体大小,颜色等等.要想实现自定义的文字,就要用到我们今天的主角--S ...

  3. Android开发之SpannableString具体解释

    在实际的应用开发过程中常常会遇到.在文本的不同部分显示一些不同的字体风格的信息如:文本的字体.大小.颜色.样式.以及超级链接等. 普通情况下,TextView中的文本都是一个样式.对于类似的情况.能够 ...

  4. Android TextView结合SpannableString使用

    super.onCreate(savedInstanceState); TextView txtInfo = new TextView(this); SpannableString ss = new ...

  5. [Android教程]TextView使用SpannableString设置复合文本

    TextView通常用来显示普通文本,但是有时候需要对其中某些文本进行样式.事件方面的设置.Android系统通过SpannableString类来对指定文本进行相关处理,具体有以下功能: 1.Bac ...

  6. Android(java)学习笔记140:SpannableString类的使用

    我们之前说过了我们想实现在TextView组件之中,可以显示URL.Email等特殊信息,这些信息点击可以实现跳转,真正意义上的超链接 要实现上面的需求就要SpannableString这个类. 因为 ...

  7. Android(java)学习笔记82:利用SpannableString设置复合文本

    1. SpannableString设置复合文本: TextView通常用来显示普通文本,但是有时候需要对其中某些文本进行样式.事件方面的设置.Android系统通过SpannableString类来 ...

  8. Android之TextView的样式类Span的使用详解

           Android中的TextView是个显示文字的的UI类,在现实中的需求中,文字有各式各样的样式,TextView本身没有属性去设置实现,我们可以通过Android提供的 Spannab ...

  9. TextView使用SpannableString设置复合文本(转)

    TextView通常用来显示普通文本,但是有时候需要对其中某些文本进行样式.事件方面的设置.Android系统通过SpannableString类来对指定文本进行相关处理,具体有以下功能: 1.Bac ...

  10. Android之TextView的Span样式源码剖析

           Android中的TextView是个显示文字的的UI类,在现实中的需求中,文字有各式各样的样式,TextView本身没有属性去设置实现,我们可以通过Android提供的 Spannab ...

随机推荐

  1. js中对数字进行正则判断

    <script type="text/javascript"> function SubmitCk(num) { var reg = /^([a-zA-Z0-9]+[_ ...

  2. springboot: 使web项目支持jsp

    1.springboot为什么不推荐使用jsp? 参考地址:https://spring.io/blog/2012/10/30/spring-mvc-from-jsp-and-tiles-to-thy ...

  3. IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件

    IMP-00013: only a DBA can import a file exported by another DBA 处理方法:在给目标环境的用户赋予dba权限,或者细粒度一些,赋予imp_ ...

  4. 学习 Git 玩转 GitHub

    原文地址:学习 Git 玩转 GitHub 博客地址:http://www.extlight.com 一.基本了解 1.1 什么是版本控制系统 版本控制系统是一种记录一个或若干个文件内容变化,以便将来 ...

  5. NFS搭建与配置

    NFS应用场景是:A,B,C三台机器上需要保证被访问到的文件是一样的,A共享数据出来,B和C分别去挂载A共享的数据目录,从而B和C访问到的数据和A上的一致性 172.131.1.135  服务器端 1 ...

  6. 记一次socket_create()函数耗时异常记录

    背景: 下午开发时突然整个页面耗时增加,空接口每次都需要2-3秒的耗时,一开始以为连开发环境数据库出现问题,最后断开数据库跑,发现还是很慢 最终逐步调试此页面耗时,定位到了socket_create( ...

  7. C++中const使用注意要点(一)

    最近看<C++编程思想>发现自己的基础确实不牢固,也想起了以前写代码时也因为const的事情浪费过时间,这里总结下几个要点. 首先说下内部链接和外部链接. 当一个cpp文件在编译时,预处理 ...

  8. 使用GDI+保存带Alpha通道的图像(续)

    之前结合网上的一些代码及ATL::CImage的实现,自己写了一个将HBITMAP以PNG格式保存到文件到函数.见上一篇日记. 不过,后来换了个环境又发现了问题,昨天和今天上午把<Windows ...

  9. Socket通讯介绍

    综上原理,代码的实施的步骤如下: Socket Families(地址簇)的三种类型,这个时候是网络层 socket.AF_UNIX unix本机进程间通信 本机之间的不同进程通讯默认是不可以通讯的, ...

  10. Type-C潮流下 如何衡量一款数据线好坏?

    不少新一代手机开始支持Type-C接口,比如乐视.PPTV.努比亚Z11.小米4C和三星Note7等.和普通Micro USB相比,Type-C数据线因为正反插的关系对品质要求更高,不然随时有短路烧毁 ...