Android-微博短链接正则表达式与特殊文本高亮

时间:2024-01-30 14:16:19

  做新浪微博第三方客户端时,对正文内容的特殊字符(如网页短链接、##话题、@人名等)进行高亮变色,需要用到以下几个正则表达式。

  

1 /**微博短链接正则表达式*/
2      static final String regex_http = "http(s)?://([a-zA-Z|\\d]+\\.)+[a-zA-Z|\\d]+(/[a-zA-Z|\\d|\\-|\\+|_./?%=]*)?";
3      static final String regex_at = "@[\\u4e00-\\u9fa5\\w\\-]+";
4      static final String regex_sharp="#([^\\#|.]+)#";
5      static final String regex_emoji="\\[[a-zA-Z0-9\\u4e00-\\u9fa5]+\\]";

 

  接下来是高亮特殊字段的函数,在前面的一篇随笔《Android-TextView关键字高亮与超链接》中有范例,本例将其进行改造,令其适合于本项目的使用。

 1 /**
 2      * 高亮部分文本
 3      * @param content  文本内容
 4      * @return
 5      */
 6     public static SpannableString setTextHighLight(String content) {
 7         SpannableString result = new SpannableString(content);
 8 
 9         if (content.contains("@")) {
10             Pattern p = Pattern.compile(regex_at);
11             Matcher m = p.matcher(result);
12             while (m.find()) {
13                 int start = m.start();
14                 int end = m.end();
15                 result.setSpan(
16                         (new ForegroundColorSpan(Color.parseColor("#33b5e5"))),
17                         start, end, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
18             }                                    
19         }
20         
21         if (content.contains("#") ){
22             Pattern p = Pattern.compile(regex_sharp);
23             Matcher m = p.matcher(result);
24             while (m.find()) {
25                 int start = m.start();
26                 int end = m.end();
27                 result.setSpan(
28                         (new ForegroundColorSpan(Color.parseColor("#ff7d00"))),
29                         start, end, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
30             }
31         }
32         
33         if (content.contains("http://") ){
34             Pattern p = Pattern.compile(regex_http);
35             Matcher m = p.matcher(result);
36             while (m.find()) {
37                 int start = m.start();
38                 int end = m.end();
39                 result.setSpan(
40                         (new ForegroundColorSpan(Color.parseColor("#33b5e5"))),
41                         start, end, Spannable.SPAN_EXCLUSIVE_INCLUSIVE);
42             }
43         }
44         
45         return result;
46     }

  接下来是对上述方法的应用

1      SpannableString text = Utils.setTextHighLight(weibo.getText());
2         holder.content.setText(text);

  效果图如下

  

  

Nexus5截屏小Tips:

同时按下【音量下键】和【电源键】即可快速截屏,一起按这两个键2秒搞定。