Android TextView 添加部分文字高亮,点击功能
如图,这里我想要的应用场景大概就是2处。
1. 图中"#教父#"表示的话题性质的内容;
2. 图中"@你我零距离"表示用户昵称的内容。
基本这些新浪微博客户端也都有。
话题的实现方式:
1. 检查帖子内容中是否包含双井号,有的话取出开始和结束位置,还有双井号包含的内容。
/** *识别字符串中的话题,话题是双"#"包含的一段文本 * */ public static boolean containsTopic(String content){ if(content==null){ return false; } return content.matches(".*\\#.+\\#.*"); } public static Topic getTopicStartEnd(String content){ Pattern pattern = Pattern.compile("\\#.+?\\#"); Matcher m = pattern.matcher(content); if(m.find()){ Topic t = new Topic(); t.setStart(m.start()); t.setEnd(m.end()); t.setTopicText(m.group()); System.out.println("start-end:"+m.start()+"-"+m.end()+":"+m.group()); return t; }else{ return null; } }
上图代码我只是测试可行性,未完善的思考,比如,我只取了1个话题,而内容中可能包含多个话题或者说多个#井号的情况未考虑。
另外有一点,什么正则表达式的几种用法也没深究,什么贪婪、侵占、勉强什么的。参考:http://www.cppblog.com/biao/archive/2010/02/05/107298.html
2. 使用 ClickableSpan
ClickableSpan span = new ClickableSpan() { @Override public void onClick(View widget) { Topic tc = (Topic)widget.getTag();//setTag用于传递数据 Log.d("spannn","click......................"+tc.getTopicText()); } }; content.setTag(c); content.setMovementMethod(LinkMovementMethod.getInstance()); Spannable wordtoSpan = new SpannableString(contentText); wordtoSpan.setSpan(span, c.getStart(), c.getEnd(), Spanned.SPAN_INCLUSIVE_EXCLUSIVE); content.setText(wordtoSpan);
用户昵称的处理方式基本也是这样。
我是cocos2dx初学者,Java5年,一点C++,OC经验都没有,各位见笑了
文章中如有错误或者不全面或者有更好的解决办法,请指出,不胜感激