繁体   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