要实现的效果
我们先看一下要实现的效果,就是一个非常常规的文本超链接
或者类似微博里评论列表:
我们在点击上边蓝色字体的时候都要跳转对应的页面。
实现方式
可能我们第一时间想到的方案就是使用Span去做,没错,这里我们就用ClickSpan去实现这样一个效果。
首先我们要自定义一个ClickSpan:
public SpannableString setClickableSpanContent(String item) {
final SpannableString string = new SpannableString(item);
ClickableSpan span = new ClickableSpan() {
@Override
public void onClick(View widget) {
//处理你的点击事件
}
@Override
public void updateDrawState(TextPaint ds) {
super.updateDrawState(ds);
// 设置显示的内容文本颜色
ds.setColor(getResources().getColor(R.color.base_blue));
ds.setUnderlineText(false);
}
};
string.setSpan(span, 0, string.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
return string;
}
然后,就可以使用这个span了,以上边第一个图为例,那么可能代码会是这样:
TextView userTerms = findViewById(R.id.terms_text);
SpannableStringBuilder builder = new SpannableStringBuilder();
builder.append("我已阅读");
builder.append(setClickableSpanContent("《未成年人隐私权保护政策》"));
userTerms.setText(builder);
userTerms.setMovementMethod(LinkMovementMethod.getInstance());
这样就实现了上边的需求。
当然这个是最简单的,下边微博列表那个稍微复杂一点,不是说实现效果复杂,而是业务逻辑稍微复杂一点,需要回复者和被回复者的UserBean,然后回复的评论等内容,这里就不再多说了!整体还是比较简单的!
问题
可能有些手机这个span的点击默认带有按下时的背景颜色,可能影响美观,那么怎么去掉这个点击时的背景颜色呢,很简单:
userTerms.setHighlightColor(getResources().getColor(android.R.color.transparent));
设置textview的highlightColor为透明就可以了~
延伸
这种比较简单,那么类似斗鱼这种直播的平台,别人发送的弹幕列表,一个人带有好多主播牌子的,还有个人等级的这种如何实现,我们下一篇再去了解!