簡體   English   中英

如何在Android中突出顯示textView的特定單詞

[英]How to highlight particular word of textView in 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。 因此,因此,在我的文本視圖中僅顯示第一行。如果該特定單詞在第一行下方,則不會高亮顯示nore。 我需要在文本視圖中顯示該特定行。 例如,如果您在任何消息應用程序中搜索,它都會按照該單詞排列單詞。

第二個問題:如果我使用setSpan,則不區分大小寫。 反之,它不會以大寫或小寫突出顯示該單詞。 就像我搜索test並在其中存在Test一樣,它不會突出顯示該單詞,而如果現在搜索Test時,它將突出顯示該單詞。

  1. 做自己的過濾器:找到單詞,在單詞前面加上幾個單詞,然后在它后面加上一些單詞(創建子字符串),然后僅將其放在textview中。
  2. 使用正則表達式不區分大小寫。

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

我最近做了這種方法來突出顯示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));

你可以試試看 它將突出顯示與您的單詞匹配的所有文本。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM