Как найти слово в строке и выделить слово в текстовом представлении в Android?
В моем приложении для Android у меня есть строка, которая содержит определенное слово, поэтому я хочу отобразить всю строку в текстовом представлении, и конкретное слово должно быть выделено. Надеюсь, что следующее изображение даст вам идею.
Я использовал следующий код, чтобы сделать это, но он не работает.
КОД:
con - моя строка, а groupNameContent - текстовое поле.
con.replaceAll(arrGroupelements[groupPosition][5],"<font color='#CA278C'>"+arrGroupelements[groupPosition][5]+"</font>.");
groupNameContent.setText(Html.fromHtml(con));
2 ответа
Решение
Для каждого слова вы можете использовать:
TextView textView = (TextView)findViewById(R.id.mytextview01);
//use a loop to change text color
Spannable WordtoSpan = new SpannableString("partial colored text");
WordtoSpan.setSpan(new ForegroundColorSpan(Color.BLUE), 2, 4, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
textView.setText(WordtoSpan);
Если я понимаю, у вас есть список слов, и вы хотите найти эти слова в тексте и выделить их, чтобы в этом ответе у вас было три входных параметра:
- полный текст.
- yourList
yourTextview, чтобы показать текст результата
String text = "full of your text"; Spannable textSpannable = new SpannableString(text); for (int j =0 ; j<yourList.size() ; j++) { //word of your list String word = String.valueOf(yourList.get(j)); //find index of words for (int i = -1; (i = text.indexOf(word, i + 1)) != -1; i++) { //find the length of word for set color int last = i + word.length(); //set text color with spannable textSpannable.setSpan(new BackgroundColorSpan(Color.parseColor("#0cab8f")), i, last, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); } } yourTextView.setText(textSpannable);
Чтобы упростить, я публикую свой метод
. . . . . . . .
Сначала готовимся к использованию метода
ArrayList<String> searchWords = new ArrayList<String>(Arrays.asList("Second", "Scottish", "forces", "England"));
String text = "1333 – Second War of Scottish Independence: The Scottish-held town of Berwick-upon-Tweed surrendered to English forces, ending a siege led by Edward III of England (depicted).";
TextView sampleTextView = new TextView(currentContext); // currentContext = getContext();
if (searchWords != null) {
Spannable newText = setSpanHighlight(text, searchWords);
sampleTextView.setText(newText, TextView.BufferType.SPANNABLE);
}
else{
sampleTextView.setText(text);
}
Методика
private Spannable setSpanHighlight(String text, @NonNull ArrayList<String> searchWord) {
Spannable newText = new SpannableString(text);
if (searchWord.size() != 0) {
for (String word : searchWord){
if (text.contains(word)){
int beginIndex = text.indexOf(String.valueOf(word)); //Unnecessary 'String.valueOf()' call => if you have something else than String
int endIndex = beginIndex + word.length();
newText.setSpan(
new ForegroundColorSpan(Color.BLUE),
beginIndex,
endIndex,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
}
}
}
return newText;
}