如何为 textiew 的某些文本设置不同的颜色并使该文本可点击?

Use*_*ser 4 android textview android-text-color

在我的应用程序中,我想使用一个文本视图,它的文本的一半应该是黑色,另一半应该是绿色,我还希望绿色部分是可点击的。我发现了一些显示如何更改颜色或如何使可点击的帖子,但我无法找到两者的组合。我自己实现了这个想法,但问题是应该可点击的字符串不可点击。如何解决这个问题?任何帮助将不胜感激。这是我的代码

String firststring="Hello i am a textiew";
lString secondstring="ClickMe";
SpannableStringBuilder builder = new SpannableStringBuilder();
SpannableString firstStringSpannable = new SpannableString(firststring);
firstStringSpannable .setSpan(new ForegroundColorSpan(Color.BLACK), 0, firststring.length(), 0);
builder.append(firstStringSpannable );

String space = " ";
SpannableString spaceSpannable = new SpannableString(space);
builder.append(spaceSpannable);

SpannableString secondSpannable = new SpannableString(secondstring);
secondSpannable .setSpan(new ForegroundColorSpan(Color.GREEN), 0, 
builder.append(secondSpannable );

textview.setText(builder, TextView.BufferType.SPANNABLE);
String comepleteString = firststring + " " + secondstring;
SpannableString spannableString = new SpannableString(comepleteString);
int startIndex = comepleteString.indexOf(secondstring);
int endIndex = startIndex + secondstring.length();

Spannable Spannable = (Spannable) textview.getText();
ClickableSpan myClickableSpan = new ClickableSpan() {
    @Override
    public void onClick(View widget) {
//performing some function
    }
};
Spannable.setSpan(myClickableSpan, startIndex, endIndex, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Run Code Online (Sandbox Code Playgroud)

Oğu*_*gül 5

使用setHighlightColor()方法大部分时间都有效:

textView.setHighlightColor(ContextCompat.getColor(context, R.color.green));
Run Code Online (Sandbox Code Playgroud)

注意:将 2 个不同字符串的代码更新为 1 个 TextView,第二个字符串将被着色且可点击。

将 TextView 的默认颜色设置为BLACK Clickable 部分将是GREEN

有一个简单的例子:

String stringFirst = "..."
String stringSecond = "..."

SpannableString spannable = new SpannableString(stringFirst + stringSecond);
    ClickableSpan clickableSpan = new ClickableSpan() {
        @Override
        public void updateDrawState(TextPaint ds) {
            super.updateDrawState(ds);
        }

        @Override
        public void onClick(View widget) {
            //Do your click action
        }
    };
    spannable.setSpan(clickableSpan, stringFirst.length()-1, stringFirst.length() + stringSecond.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

textView.setText(spannable);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setHighlightColor(ContextCompat.getColor(context, R.color.green));
Run Code Online (Sandbox Code Playgroud)

如果它不起作用,请添加下面的行

ds.setColor(ContextCompat.getColor(context, R.color.green));
Run Code Online (Sandbox Code Playgroud)

到您的updateDrawState方法。它看起来像这样:

String stringFirst = "..."
String stringSecond = "..."

SpannableString spannable = new SpannableString(stringFirst + stringSecond);
    ClickableSpan clickableSpan = new ClickableSpan() {
        @Override
        public void updateDrawState(TextPaint ds) {
            super.updateDrawState(ds);
            ds.setColor(ContextCompat.getColor(context, R.color.green));
        }

        @Override
        public void onClick(View widget) {
            //Do your click action
        }
    };
    spannable.setSpan(clickableSpan, stringFirst.length()-1, stringFirst.length() + stringSecond.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

textView.setText(spannable);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setHighlightColor(ContextCompat.getColor(context, R.color.green));
Run Code Online (Sandbox Code Playgroud)