给TextView个别字设置点击事件和颜色

像下图中的效果在日常开发中还是经常用到的,那么像这种效果要怎么实现呢?

今天就简单实现以下如图的效果。具体实现步骤如下代码块:

1
2
3
4
5
6
7
8
9
10
11
12
TextView textView = helper.getView(R.id.tv_question_title); //这里就是findViewById
SpannableString spannableString = new SpannableString(item);
spannableString.setSpan(new TopicSpanWrapper() { //TopicSpanWrapper是ClickableSpan的自定义类,为了取消默认的下划线
@Override
public void onClick(View widget) {
Toast.makeText(mContext, "我被点击了", Toast.LENGTH_SHORT).show();
}
}, 4, 8, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
spannableString.setSpan(new ForegroundColorSpan(Color.parseColor("#6EA6E0")), 4,8, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);//设置字体的颜色

textView.setText(spannableString);
textView.setMovementMethod(LinkMovementMethod.getInstance());
1
2
3
4
5
6
7
8
public abstract class TopicSpanWrapper extends ClickableSpan {
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
// 去掉超链接的下划线
ds.setUnderlineText(false);
}
}

通过以上步骤就实现了上图所示的效果。