如何在android

问题描述:

中突出显示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,它不区分大小写。当搜索词反过来时,它不会以大写或小写突出显示。就像我搜索测试和测试那里它不会突出显示该单词,如果现在我搜索测试它会突出显示同一个单词。

  1. 做你自己的过滤器:查找单词,走在前面的几句话和一些后(创建子字符串),并把只在你的TextView。
  2. 搜索与正则表达式不敏感的案例。

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

+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

不能解决我面临的两个问题 –

你可以试试这个。它会突出显示与您的单词匹配的所有文字。

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

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