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