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

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

  

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秒搞定。

 

转载于:https://www.cnblogs.com/Syun0929/p/3737960.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值