2017-08-30 36 views
1

中突出顯示textView的特定單詞我正在構建一個應用程序,其中用戶使用搜索功能來檢查特定單詞是否存在於數據庫中。在後端進程中,我使用類似查詢來篩選出正確的結果並將其顯示在列表視圖中。如何在android

在列表視圖中,有一個文本視圖,其中顯示信息並且該特定單詞在該文本視圖中使用setSpan我用下面指定的顏色突出顯示該特定單詞。

highlightedWord.setSpan(new BackgroundColorSpan(0xFFFFFF00) , 0, highlightedWord.length(), 
         SpannableString.SPAN_EXCLUSIVE_EXCLUSIVE); 



    holder.messageTxt.setMovementMethod(LinkMovementMethod.getInstance()); 
       holder.messageTxt.setHighlightColor(Color.YELLOW); 
       holder.messageTxt.setText(firstString); 
       holder.messageTxt.append(highlightedWord); 
       holder.messageTxt.append(secondString); 

它運行良好,直到這裏。

第一個問題: 現在的問題是如果有10行或更多的信息,並且我的文本視圖設置爲max-Line one。因此,唯一的第一行顯示在我的文本視圖中。如果該特定單詞位於第一行下方,它不會突出顯示。我需要在我的文本視圖中顯示該特定行。例如,如果您在任何消息應用程序中進行搜索,它會按照它排列單詞。

第二個問題: 如果我使用setSpan,它不區分大小寫。當搜索詞反過來時,它不會以大寫或小寫突出顯示。就像我搜索測試和測試那裏它不會突出顯示該單詞,如果現在我搜索測試它會突出顯示同一個單詞。

回答

0
  1. 做你自己的過濾器:查找單詞,走在前面的幾句話和一些後(創建子字符串),並把只在你的TextView。
  2. 搜索與正則表達式不敏感的案例。
0

您可以使用holder.messageTxt.setText(Html.fromHtml(firstString +"<i>"+highlight+"</i>" + secondString));簡單的HTML格式

+0

它碰到特殊字符。 –

0

我最近做了這種方法,以突出一個TextView字符串的特定部分。

public static SpannableString colorString(int color, String text, String...wordsToColor) { 
    SpannableString coloredString = new SpannableString(text); 

    for(String word : wordsToColor) { 
     int startColorIndex = text.indexOf(word); 
     int endColorIndex = startColorIndex + word.length(); 
     coloredString.setSpan(new ForegroundColorSpan(color), startColorIndex, endColorIndex, 
       Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); 
    } 

    return coloredString; 
} 

此方法允許你在一個顏色傳遞,字符串的全文,並要與顏色突出的字符串的話。它可以使用如下。

textView.setText(colorString(ContextCompat.getColor(context, R.color.colorPrimaryLink), 
      fullString, highlightedWord1, highlightedWord2)); 
+0

不能解決我面臨的兩個問題 –

0

你可以試試這個。它會突出顯示與您的單詞匹配的所有文字。

origString = origString.replaceAll(textToHighlight,"<font color='red'>"+textToHighlight+"</font>"); 

    Textview.setText(Html.fromHtml(origString));