private CharSequence setTextView(String desc,String target, TextView tv) {
/*正则表达式 取出 两个#之间的内容 (不包含#) */
Pattern p = Pattern.compile("#([^\\#|]+)#");
/*android 提供的 具有强大的CharSequence 处理能力 各种区域处理*/
SpannableString ss = new SpannableString(desc);
Matcher m = p.matcher(target);
/*由于@昵称、#话题#、http://等这些关键字是可以点击的,所以我们需要对TextView做一些处理,需要去设置它的MovementMethod*/
if (m.find()) {
// 要实现文字的点击效果,这里需要做特殊处理
tv.setMovementMethod(LinkMovementMethod.getInstance());
// 重置正则位置
m.reset();
}
/*循环找出每个复合正则的字符串,逐个处理*/
while (m.find()) {
/*取出 字符串 前后添加#*/
// final String s = "#" + m.group(1) + "#";
final String s = m.group(1);
// int startIndex = m.start(1) -1;
// int startIndex = m.start(1);
int startIndex = desc.indexOf(s);
int endIndex = startIndex + s.length();
/*区域处理*/
ss.setSpan(new ForegroundColorSpan(Color.BLUE),startIndex,endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
ss.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
//去掉两边的#号,获取点击的话题内容
showToastMsg("1");
// String content=s.substring(1,s.length()-1);
// String topicId="";//话题的id
// for (int i=0;i<commList.getTopic().size();i++){
// if (content.equals(commList.getTopic().get(i).getTitle())){
// topicId=commList.getTopic().get(i).getId();
// }
// }
// if (topicId.equals(itemId)){
// return;
// }
// CommTopicActivity.startCommTopicActivity(mContext,topicId);
// MobclickAgent.onEvent(mContext,"pla_Feed_topic",commList.getId()+"_"+topicId);
}
@Override
public void updateDrawState(TextPaint ds) {
// super.updateDrawState(ds);
// 按自己需求 重写 父类方法.
// 字体变色
ds.setColor(Color.parseColor("#507daf"));
// 设置下划线
ds.setUnderlineText(false);
}
}, startIndex, endIndex, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return ss;
}
调用方式
tv_user_xieyi.setText(setTextView("登录即表示同意《用户协议》和《隐私政策》","登录即表示同意#《用户协议》#和#《隐私政策》#", tv_user_xieyi));
tv_user_xieyi.setHighlightColor(getResources().getColor(R.color.white));//取消背景色