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

时间:2017-04-01 11:20:34

标签: android textview android-text-color

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

    Uri photoURI = FileProvider.getUriForFile(this,
                                              "com.example.android.fileprovider", image /* return file*/);

3 个答案:

答案 0 :(得分:2)

使用 setHighlightColor()方法可以在大多数时间使用:

textView.setHighlightColor(ContextCompat.getColor(context, R.color.green));

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

将TextView的默认颜色设置为黑色 可点击的部分将是绿色

有一个简单的例子:

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

如果不起作用,请添加以下行

ds.setColor(ContextCompat.getColor(context, R.color.green));

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

答案 1 :(得分:0)

首先,您可以逐个放置两个textview。 比在给定字符串的活动类计数字符之后而不是在拆分两个相同的编号之后(例如:26个字符比除以2所以基本上ans将在第一个文本视图中为13个字符,在第二个textview中为第二个13个字符)

如何解决这个问题:

string msg;
int lenght = msg.length();
int half = lenght/2;

String msg1 = msg.subString(0,half);
String msg2 = msg.subString(half,lenght);

这两个字符串设置在你的两个textView上你想要点击事件而不是plz管理你的需求textView你也可以通过编程或xml文件改变textview的颜色

答案 2 :(得分:0)

希望这可以帮助你:)

protected void makeLinkClickable(SpannableStringBuilder strBuilder, final URLSpan span)
{
    int start = strBuilder.getSpanStart(span);
    int end = strBuilder.getSpanEnd(span);
    int flags = strBuilder.getSpanFlags(span);
    ClickableSpan clickable = new ClickableSpan() {
        public void onClick(View view) {
            // Do something with span.getURL() to handle the link click...
        }
    };
    strBuilder.setSpan(clickable, start, end, flags);
    strBuilder.removeSpan(span);
}

protected void setTextViewHTML(TextView text, String st1, String st2)
{
    CharSequence sequence = Html.fromHtml("<font color='green'>"+st1+"</font><font color='black'>"+st2+"</font");
    SpannableStringBuilder strBuilder = new SpannableStringBuilder(sequence);
    URLSpan[] urls = strBuilder.getSpans(0, sequence.length(), URLSpan.class);   
    for(URLSpan span : urls) {
        makeLinkClickable(strBuilder, span);
    }
    text.setText(strBuilder);
    text.setMovementMethod(LinkMovementMethod.getInstance());       
}