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

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


Android TextView 设置超链接、关键字高亮等效果_第1张图片


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

这里用到了SpannableString类

Android TextView 设置超链接、关键字高亮等效果_第2张图片


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

Android TextView 设置超链接、关键字高亮等效果_第3张图片


1、创建超链接

[java]  view plain  copy
 
  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
 
  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
 
  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
 
  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
 
  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
 
  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
 
  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.     }  



运行效果

Android TextView 设置超链接、关键字高亮等效果_第4张图片

你可能感兴趣的:(SpannableString)