更改文本TextView中特定单词的背景颜色

时间:2015-12-04 07:35:10

标签: android

我想更改TextView中特定单词的背景颜色:

如下图所示

enter image description here

4 个答案:

答案 0 :(得分:5)

以下是我的工作代码,可用于突出显示字符串的某些部分:

     private void highlightTextPart(TextView textView, int index, String regularExpression) {
        String fullText = textView.getText().toString();
        int startPos = 0;
        int endPos = fullText.length();
        String[] textParts = fullText.split(regularExpression);
        if (index < 0 || index > textParts.length - 1) {
            return;
        }
        if (textParts.length > 1) {
            startPos = fullText.indexOf(textParts[index]);
            endPos = fullText.indexOf(regularExpression, startPos);
            if (endPos == -1) {
                endPos = fullText.length();
            }
        }
        Spannable spannable = new SpannableString(fullText);
        ColorStateList blueColor = new ColorStateList(new int[][] { new int[] {}}, new int[] { Color.BLUE });
        TextAppearanceSpan textAppearanceSpan = new TextAppearanceSpan(null, Typeface.BOLD_ITALIC, -1, blueColor, null);
        BackgroundColorSpan backgroundColorSpan = new BackgroundColorSpan(Color.GREEN);
        spannable.setSpan(textAppearanceSpan, startPos, endPos, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        spannable.setSpan(backgroundColorSpan, startPos, endPos, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        textView.setText(spannable);
    }

然后在您的活动中,请按以下方式拨打电话:

    int index = 3;
    String regularExpression = " ";
    String text = "Hello StackOverflow From BNK!";
    TextView textView = (TextView) findViewById(R.id.textView);
    if (textView != null) {
        textView.setText(text);
        highlightTextPart(textView, index, regularExpression);
    }

enter image description here

答案 1 :(得分:2)

试试这个

String str = "Some really long string goes in here";
Spannable spannable = new SpannableString(str);
spannable.setSpan(new BackgroundColorSpan(
  getResources().getColor(android.R.color.black)
), 0, str.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
yourTextView.setText(spannable);

请参阅此Picasso

答案 2 :(得分:2)

    String string = "As Soon As";
    SpannableString spannableString = new SpannableString(string);
    toolBarSpan.setSpan(new BackgroundColorSpan(Color.parseColor("#ff0000")), 3, 7,
            Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
     yourTextView.setText(toolBarSpan);

什么是Spannable&amp;这个怎么运作 ? 将指定的标记对象附加到文本的范围开始...结尾,或者如果对象已经附加到其他位置,则将对象移动到该范围。 有关详细信息,请查看linksetSpan&amp;也知道如何开始和结束号码(如Spannable中的anser 3&amp; 7

<强>更新

请使用此工作代码

String mainString = "As Soon As";
String subString = "Soon";

if(mainString.contains(subString)) {
      int startIndex = mainString.indexOf(subString);
      int endIndex = startIndex + subString.length();
      SpannableString spannableString = new SpannableString(mainString);
      spannableString.setSpan(new BackgroundColorSpan(Color.parseColor("#ff0000")), startIndex, endIndex,
      Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
      textView.setText(spannableString);
}

答案 3 :(得分:0)

在Android的Textview中更改特定单词的文本背景颜色的简单最佳方法

enter image description here

TextView txtMessage=findViewById(R.id.textview_msg);
String text="Hello World!";
String search_term="Hello";
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
{
  String newString = text.replaceAll(search_term, "<span style='background:
  yellow;'>"+search_term+"</span>");          
  txtMessage.setText(Html.fromHtml(newString
  ,HtmlCompat.FROM_HTML_MODE_LEGACY));
}
else 
{
  String newString = text.replaceAll(search_term, "<font 
  color='#f3f402'>"+search_term+"</font>"); 
  txtMessage.setText(Html.fromHtml(newString));
}