Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何为文本视图的某些文本设置不同的颜色并使该文本可单击?_Android_Textview_Android Text Color - Fatal编程技术网

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

Android 如何为文本视图的某些文本设置不同的颜色并使该文本可单击?,android,textview,android-text-color,Android,Textview,Android Text Color,在我的应用程序中,我希望使用一个文本视图,该视图的一半文本为黑色,另一半文本为绿色,我还希望绿色部分可以单击。 我发现一些帖子展示了如何改变颜色或如何使其可点击,但我找不到两者的结合。我自己实现了这个想法,但问题是应该可点击的字符串不可点击。如何解决这个问题? 任何帮助都将不胜感激。 这是我的密码 String firststring="Hello i am a textiew"; lString secondstring="ClickMe"; SpannableStringBuilder bu

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

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

使用setHighlightColor()方法在大多数情况下有效:

textView.setHighlightColor(ContextCompat.getColor(context, R.color.green));
注意:将2个不同字符串的代码更新为1个文本视图,第二个字符串将着色并可单击

将文本视图的默认颜色设置为黑色 可单击的部分将为绿色

有一个简单的例子:

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

首先,您可以将两个textview逐个水平放置。 than after activity类计数给定字符串的字符than split两个相同编号后的字符than(例如:26个字符的than除以2,因此基本上ans在第一个文本视图中为13个字符,在第二个文本视图中为13个字符)

如何做到这一点: 这两个字符串设置在您的两个文本视图上,您希望单击事件,然后在您的需求文本视图上对其进行管理。您还可以通过编程或xml文件更改文本视图的颜色。

希望这对您有所帮助:)

protectedvoid makeLinkClickable(SpannableStringBuilder strBuilder,最终URLSpan)
{
int start=strBuilder.getSpanStart(span);
int end=strBuilder.getSpanEnd(span);
int flags=strBuilder.getSpanFlags(span);
ClickableSpan clickable=新的ClickableSpan(){
公共void onClick(视图){
//使用span.getURL()执行某些操作以处理链接单击。。。
}
};
strBuilder.setSpan(可单击、开始、结束、标志);
strBuilder.removeSpan(span);
}
受保护的无效setTextViewHTML(TextView文本、字符串st1、字符串st2)
{

CharSequence sequence=Html.fromHtml(“+st1+”+st2+”你有没有试过textview.setText(Html.fromHtml)(“这是一些文本!Html标记的另一个TXT和混合颜色我有两个字符串,我想在textview上设置这两个字符串,一个应该是彩色的,另一个是彩色的。”clickable@User更新了我的答案。Thanx updateDrawState用于在可扩展文本上显示颜色。
string msg;
int lenght = msg.length();
int half = lenght/2;

String msg1 = msg.subString(0,half);
String msg2 = msg.subString(half,lenght);
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());       
}