如何在android

时间:2017-08-30 14:07:01

标签: java android textview highlight

我正在构建一个应用程序,其中使用搜索功能的用户检查数据库中是否存在特定单词。在后端进程中,我使用类似的查询来过滤掉正确的结果并将其显示在列表视图中。

在列表视图中,有一个文本视图,其中显示信息,特定单词在该文本视图中使用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 1。因此,我的文本视图中只显示了第一行。如果该特定单词位于第一行下方,则不会突出显示未显示的内容。我需要在文本视图中显示该特定行。例如,如果您在任何消息应用程序中搜索它按照它排列单词。

第二个问题: 如果我使用的是setSpan,则不区分大小写。当搜索词反之亦然时,它不会突出显示大写字母或小字。就像我搜索测试和测试那里它不会突出显示那个词,如果现在我搜索测试它将突出显示相同的单词。

4 个答案:

答案 0 :(得分:0)

  1. 做你自己的过滤器:找到单词,在它前面加几个单词,然后在它后面加一些单词(创建一个子字符串),然后只将它放在textview中。
  2. 使用正则表达式对搜索案例不敏感。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我最近制作了这个方法,以突出显示文本视图的字符串的特定部分。

$('#form-reg').on('submit', function(e){
  e.preventDefault();

此方法允许您传入颜色,字符串的全文以及要用颜色突出显示的字符串的单词。它可以如下使用。

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;
}

答案 3 :(得分:0)

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

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

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