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

标签 android onclick clickable spannablestring spannable

我使用 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 时,它应该使 Black 不可单击,并且 Blue (同一字符串的另一部分)可点击。

因此,要使 Blue 可点击,我们可以在同一 spannableString 上再次调用 setSpan()。但是我怎样才能使 Black 不可点击?

最佳答案

您可以调用removeSpan()删除任何以前添加的跨度。在这种特殊情况下,这非常容易,因为我们持有对我们要删除的 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);

出于某种我无法理解的原因,span 的文档真的很差......它们非常强大!

关于Android:让 TextView 的文本的一部分在运行时不可点击?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27221305/

相关文章:

css - 如何使底层div不可点击?

javascript - 如何使谷歌折线图上的线可点击

android - 弹出验证 native 密码android

android - IllegalArgumentException : provider doesn't exisit: null on Maps V1

javascript - 在 HTML 中单击按钮时调用 JavaScript 函数

android - 以编程方式添加的按钮的不同点击

Javascript 替换同一字段中的函数

java - Android - 单击后无法设置可单击(false)按钮

java - 清空内部 DCIM 文件夹 - Android Java

android - 将用于拼写检查的自定义字典添加到 Android Studio