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


Android TextView 设置超链接、关键字高亮等效果_背景颜色

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

这里用到了SpannableString类


Android TextView 设置超链接、关键字高亮等效果_背景颜色_02

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


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

1、创建超链接


[java]  view plain  copy


1. /**
2.      * 创建一个超链接
3.      */  
4. private void createLink() {  
5. // 创建一个 SpannableString对象  
6. new SpannableString("百度手机卫士");  
7. // 设置超链接  
8. new URLSpan("http://www.baidu.com"), 0, 2,  
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. new SpannableString("祝大家新年快乐");  
5. //设置背景颜色  
6. 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. new SpannableString("祝大家新年快乐");  
    5. //设置背景颜色  
    6. 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. new SpannableString("新年快乐天天开心 哈哈哈哈哈哈");  
    5. //      SpannableString sp = new SpannableString("Happy New Year 天天开心 哈哈哈哈哈哈");  
    6. //设置背景颜色  
    7. 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. new SpannableString("祝大家新年快乐");  
    5. //设置背景颜色  
    6. 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. new SpannableString("祝大家新年快乐");  
      5. //设置背景颜色  
      6. 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. "KTV风暴KTV";  
      7. new SpannableString(str);  
      8.           
      9. "KTV");  
      10.         Matcher m = p.matcher(str);  
      11.   
      12. while (m.find()) {  //通过正则查找,逐个高亮  
      13. int start = m.start();  
      14. int end = m.end();  
      15. new ForegroundColorSpan(Color.parseColor("#ff6600")), start ,end,Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);    
      16.         }  
      17.         tv_content7.setText(sp);  
      18.     }
      1.  




      运行效果


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