Android:如何在运行时使TextView的一部分文本不可点击?

3
我使用Android.text.style.ClickableSpan使字符串(Blue | Black)中的一部分(Black)可点击:
SpannableString spannableString = new SpannableString("Blue | Black ");
ClickableSpan clickableSpan = new ClickableSpan() {
    @Override
    public void onClick(View textView) {
        //...
    }
};
ss.setSpan(clickableSpan, 7, 11, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

TextView textView = (TextView) findViewById(R.id.secondActivity_textView4);
textView.setText(spannableString);
textView.setMovementMethod(LinkMovementMethod.getInstance());

所以字符串中的Black部分是可点击的。我的要求是,当用户点击Black时,应该使其变为不可点击,并使同一字符串的另一部分Blue可点击。

因此,要使Blue可点击,我们可以在同一个spannableString上再次调用setSpan()。但是如何使Black不可点击呢?

1个回答

2
你可以调用removeSpan() 来删除任何先前添加的Spans。在这种情况下,非常容易,因为我们持有对要删除的Span的引用:
ClickableSpan clickableSpan = new ClickableSpan()
{
    @Override
    public void onClick(View view)
    {
        ((SpannableString)textView.getText()).removeSpan(this);
    }
};

另一个选择是遍历所有的 ClickableSpan 实例并将它们全部删除,如下所示:
    SpannableString str = (SpannableString)textView.getText();
    for (ClickableSpan span : str.getSpans(0, str.length(), ClickableSpan.class))
        str.removeSpan(span);

出于某些我无法理解的原因,关于spans的文档非常差...它们非常强大!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接