Change text Background color of Specific word in a TextView

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


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


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

Tags:

Android