做新浪微博第三方客户端时,对正文内容的特殊字符(如网页短链接、##话题、@人名等)进行高亮变色,需要用到以下几个正则表达式。
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秒搞定。
时间: 2024-10-14 23:03:36