您的位置:首页 > 移动开发 > Android开发

Android TextView 添加部分文字高亮,点击功能

2015-05-28 15:28 555 查看
如图,这里我想要的应用场景大概就是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);


用户昵称的处理方式基本也是这样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: