String fullText = "Our Honorable Prime Minister";
String searchText = "onor";
I can highlight "onor" text well. [by using bottom codes]
But I want to highlight full "Honorable" text when my search string is "onor".
My code is:
public static void setSearchText(TextView textView, String fullText, String searchText) {
// highlight search text
if (null != searchText && !searchText.isEmpty()) {
int startPos = fullText.indexOf(searchText);
int endPos = startPos + searchText.length();
if (startPos != -1) {
int ofe = fullText.indexOf(searchText, 0);
Spannable WordtoSpan = new SpannableString(fullText);
for (int ofs = 0; ofs < fullText.length() && ofe != -1; ofs = ofe + 1) {
ofe = fullText.indexOf(searchText, ofs);
if (ofe == -1)
break;
else {
ColorStateList redColor = new ColorStateList(new int[][]{new int[]{}}, new int[]{Color.RED});
TextAppearanceSpan highlightSpan = new TextAppearanceSpan(null, Typeface.BOLD, -1, redColor, null);
WordtoSpan.setSpan(highlightSpan, ofe, ofe + searchText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
WordtoSpan.setSpan(new BackgroundColorSpan(0xFFFFFF00), ofe, ofe + searchText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
WordtoSpan.setSpan(new RelativeSizeSpan(1.5f), ofe, ofe + searchText.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(WordtoSpan, TextView.BufferType.SPANNABLE);
}
}
} else {
textView.setText(fullText);
}
} else {
textView.setText(fullText);
}
}
Once you've found a match for your search string in the full text, you need to expand that match outwards to the word boundaries (spaces).
This is one way to do it:
// For single Item search
// For Multiple String Search Use following Codes: