Reputation: 683
I want to change background color of specific word in TextView
:
Like image below
Upvotes: 8
Views: 4282
Reputation: 1428
Simple and Best way to change text background color of specific word in a textview Android
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
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);
}
Upvotes: 7
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
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