如何为 textiew 的某些文本设置不同的颜色并使该文本可点击?
How to set different color to some text of a textiew and make that text clickable?
在我的应用程序中,我想使用一个文本视图,它的文本一半应该是黑色的,而后半部分应该是绿色的,我还希望绿色部分可以点击。
我找到了一些显示如何更改颜色或如何使可点击的帖子,但我无法找到两者的组合。我自己实现了这个想法,但是问题是应该可以点击的字符串点击不了。如何解决这个问题?
任何帮助将不胜感激。
这是我的代码
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 个 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));
首先你可以水平放置两个textview。
比 activity class 计数给定字符串的字符比拆分两个相同编号后(示例:26 个字符除以 2 所以基本上 ans 在第一个文本视图中为 13 个字符,在第二个文本视图中为 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 的颜色
希望对您有所帮助:)
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());
}
在我的应用程序中,我想使用一个文本视图,它的文本一半应该是黑色的,而后半部分应该是绿色的,我还希望绿色部分可以点击。 我找到了一些显示如何更改颜色或如何使可点击的帖子,但我无法找到两者的组合。我自己实现了这个想法,但是问题是应该可以点击的字符串点击不了。如何解决这个问题? 任何帮助将不胜感激。 这是我的代码
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 个 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));
首先你可以水平放置两个textview。 比 activity class 计数给定字符串的字符比拆分两个相同编号后(示例:26 个字符除以 2 所以基本上 ans 在第一个文本视图中为 13 个字符,在第二个文本视图中为 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 的颜色
希望对您有所帮助:)
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());
}