Android TextView 设置超链接、关键字高亮等效果

之前做TextView关键字高亮效果,使用的是Html.fromHtml(String source)方法,然后通过TextView的setText(CharSequence text)方法来显示




后来测试此方法在部分手机上显示有问题,如Nexus4,华为P6等等。于是乎只能继续寻找别的解决办法了,在这里Mark一下。

这里用到了SpannableString类



使用 SpannableString.setSpan(Object what, int start, int end, int flags)方法



1、创建超链接

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.      * 创建一个超链接 
  3.      */  
  4.     private void createLink() {  
  5.         // 创建一个 SpannableString对象  
  6.         SpannableString sp = new SpannableString("百度手机卫士");  
  7.         // 设置超链接  
  8.         sp.setSpan(new URLSpan("http://www.baidu.com"), 02,  
  9.                 Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  
  10.           
  11.         tv_content1.setText(sp);  
  12.         //设置TextView可点击    
  13.         tv_content1.setMovementMethod(LinkMovementMethod.getInstance());    
  14.     }  


2、高亮某一段文字的背景

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //高亮背景颜色  
  2.     private void backgroundHight(){  
  3.         // 创建一个 SpannableString对象  
  4.         SpannableString sp = new SpannableString("祝大家新年快乐");  
  5.         //设置背景颜色  
  6.         sp.setSpan(new BackgroundColorSpan(Color.RED), 3 ,5,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
  7.         tv_content2.setText(sp);  
  8.         //设置TextView可点击    
  9.         tv_content2.setMovementMethod(LinkMovementMethod.getInstance());    
  10.     }  


3、高亮某段文字

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //高亮字体颜色  
  2.     private void foregroundHight(){  
  3.         // 创建一个 SpannableString对象  
  4.         SpannableString sp = new SpannableString("祝大家新年快乐");  
  5.         //设置背景颜色  
  6.         sp.setSpan(new ForegroundColorSpan(Color.parseColor("#ff6600")), 3 ,5,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
  7. //      sp.setSpan(new ForegroundColorSpan(Color.YELLOW), 3 ,5,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
  8.         tv_content3.setText(sp);  
  9.         //设置TextView可点击    
  10.         tv_content3.setMovementMethod(LinkMovementMethod.getInstance());    
  11.     }  


4、设置斜体

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //斜体  
  2.     private void boldItalicHight(){  
  3.         // 创建一个 SpannableString对象  
  4.         SpannableString sp = new SpannableString("新年快乐天天开心 哈哈哈哈哈哈");  
  5. //      SpannableString sp = new SpannableString("Happy New Year 天天开心 哈哈哈哈哈哈");  
  6.         //设置背景颜色  
  7.         sp.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 6 ,10,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
  8.         tv_content4.setText(sp);  
  9.         //设置TextView可点击    
  10.         tv_content4.setMovementMethod(LinkMovementMethod.getInstance());    
  11.     }  


这里设置的斜体只对 英文起作用,汉字没有斜体效果,如果有人知道原因,麻烦在下面回复我一下,谢谢!

5、设置下划线

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //下划线  
  2.     private void underLineHight(){  
  3.         // 创建一个 SpannableString对象  
  4.         SpannableString sp = new SpannableString("祝大家新年快乐");  
  5.         //设置背景颜色  
  6.         sp.setSpan(new UnderlineSpan(), 3 ,5,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
  7.         tv_content5.setText(sp);  
  8.         //设置TextView可点击    
  9.         tv_content5.setMovementMethod(LinkMovementMethod.getInstance());    
  10.     }  


6、设置中划线

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. //中划线  
  2.     private void strikethroughHight(){  
  3.         // 创建一个 SpannableString对象  
  4.         SpannableString sp = new SpannableString("祝大家新年快乐");  
  5.         //设置背景颜色  
  6.         sp.setSpan(new StrikethroughSpan(), 3 ,5,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
  7.         tv_content6.setText(sp);  
  8.         //设置TextView可点击    
  9.         tv_content6.setMovementMethod(LinkMovementMethod.getInstance());    
  10.     }  


7、高亮一段文字中指定的全部关键字

[java]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. /** 
  2.      * 高亮某个关键字,如果有多个则全部高亮 
  3.      */  
  4.     private void highlightKeyword() {  
  5.           
  6.         String str = "KTV风暴KTV";  
  7.         SpannableString sp = new SpannableString(str);  
  8.           
  9.         Pattern p = Pattern.compile("KTV");  
  10.         Matcher m = p.matcher(str);  
  11.   
  12.         while (m.find()) {  //通过正则查找,逐个高亮  
  13.             int start = m.start();  
  14.             int end = m.end();  
  15.             sp.setSpan(new ForegroundColorSpan(Color.parseColor("#ff6600")), start ,end,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
  16.         }  
  17.         tv_content7.setText(sp);  
  18.     }  



运行效果

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值