应用文本点击超链接的实现方式-ClickSpan(评论回复列表,协议同意等)

要实现的效果

我们先看一下要实现的效果,就是一个非常常规的文本超链接
在这里插入图片描述
或者类似微博里评论列表:
在这里插入图片描述
我们在点击上边蓝色字体的时候都要跳转对应的页面。

实现方式

可能我们第一时间想到的方案就是使用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为透明就可以了~

延伸

这种比较简单,那么类似斗鱼这种直播的平台,别人发送的弹幕列表,一个人带有好多主播牌子的,还有个人等级的这种如何实现,我们下一篇再去了解!

你可能感兴趣的:(Android学习笔记,android)