M.Muzammil
M.Muzammil

Reputation: 683

Change text Background color of Specific word in a TextView

I want to change background color of specific word in TextView :

Like image below

enter image description here

Upvotes: 8

Views: 4282

Answers (4)

Ram
Ram

Reputation: 1428

Simple and Best way to change text background color of specific word in a textview Android

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

Upvotes: 0

BNK
BNK

Reputation: 24114

Here is my working code that you can use to highlight some part of string:

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

Then in your activity, call like the following:

    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

Upvotes: 7

Nitin Mesta
Nitin Mesta

Reputation: 1504

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

What is Spannable & How it works ? Attach the specified markup object to the range start…end of the text, or move the object to that range if it was already attached elsewhere. For more details please you can check setSpan of Spannable & also know how that start and end number is required (like in anser 3 & 7 in BackgroundColorSpan

UPDATE

Please use this working code

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

Upvotes: 3

N J
N J

Reputation: 27505

Try this

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

see this link

Upvotes: 2

Related Questions