使用SpannableString,ClickableSpan,文字部分可点击

原文地址:http://blog.csdn.net/xiaonadiandian/article/details/50477790


最近4个月都在忙一个项目,最近项目接近尾声,所有打算趁这个机会稍微做一点总结。

本次总结的功能是实现一段文字,部分文字颜色不同,部分文字有下划线并且可以点击,主要的思路就是使用SpannableString,自定义一个ClickableSpan。以下就是实现该功能的具体步骤以及相关代码。

1.自定义ClickableSpan,通过不同的type去判断文字显示的颜色以及下划线显示状况。

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. public abstract class ClickableColorSpan extends ClickableSpan {  
  2.   
  3.         private int type;  
  4.   
  5.         public ClickableColorSpan(int type) {  
  6.             // this.str = str;  
  7.             this.type = type;  
  8.         }  
  9.   
  10.         @Override  
  11.         public void updateDrawState(TextPaint ds) {  
  12.             if (type == Constants.NOTHING)// 空格情况  
  13.             {  
  14.                 // ds.setColor(ds.linkColor);  
  15.                 ds.setColor(getActivity().getResources().getColor(  
  16.                         R.color.linkcolor));  
  17.                 ds.setUnderlineText(false);//是否显示下划线  
  18.             }  
  19.             if (type == Constants.DESCRIPTION)// 解释或空格选择  
  20.             {  
  21.                 ds.setColor(getActivity().getResources().getColor(  
  22.                         R.color.orange));  
  23.                 ds.setUnderlineText(false);  
  24.             }  
  25.             if (type == Constants.NORMAL)// 正常情况  
  26.             {  
  27.                 // ds.setColor(ds.linkColor);  
  28.                 ds.setColor(getActivity().getResources().getColor(  
  29.                         R.color.linkcolor));  
  30.                 ds.setUnderlineText(true);  
  31.             }  
  32.             if (type == Constants.SELECTED)// 非空格选择  
  33.             {  
  34.                 // ds.setColor(ds.linkColor);  
  35.                 ds.setColor(getActivity().getResources().getColor(  
  36.                         R.color.orange));  
  37.                 ds.setUnderlineText(true);  
  38.             }  
  39.         }  
  40.     }  

 
2.生成富文本 

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. private SpannableString getClickableSpan() {  
  2.         int start = 2;//设置点击范围  
  3.         int end = 4;  
  4.         SpannableString spanableInfo = new SpannableString("hello word");  
  5.         spanableInfo.setSpan(  
  6.                 new ClickableColorSpan(0) {  
  7.                     @Override  
  8.                     public void onClick(View v) {  
  9.                     //点击事件  
  10.                     }  
  11.                 }, start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  12.         return spanableInfo;  
  13.     }  
3.给控件赋值

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. txtView.setText(getClickableSpan());  
  2. txtView.setMovementMethod(LinkMovementMethod.getInstance());  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值