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

时间:2014-12-01 03:33:14

标签: android onclick clickable spannablestring spannable

我使用Android.text.style.ClickableSpan创建了一个字符串(Black)可点击的部分(Blue | 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时,它应该Black不可点击,Blue(同一字符串的另一部分)可点击。

为了使Blue可点击,我们可以在同一时间setSpan()再次呼叫spannableString。但是,如何才能使Black无法点击?

1 个答案:

答案 0 :(得分:2)

您可以致电removeSpan()删除之前添加的任何Spans。在这种特殊情况下,它很容易,因为我们提到了我们要删除的跨度:

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);

由于某些我无法理解的原因,跨度的文档真的很差......它们非常强大!