突出显示recycleView列表中的查询文本,忽略空格

时间:2019-11-05 20:22:34

标签: android searchview spannablestring

我试图在recycleView列表中突出显示查询的文本。 我的要求是忽略空格并突出显示文本。

我的列表:[“ Robert De Niro”,“ Jack Nicholson”,“ Marlon Brando”]

搜索查询:DeNiro

预期:罗伯特 De N iro

下面是我的代码

  private Spannable getHighlightedText(String wholeText, String searchText) {

    if (searchText != null && wholeText.toLowerCase().contains(searchText.toLowerCase())) {
        int startPos = wholeText.toLowerCase().indexOf(searchText.toLowerCase());
        int endPos = startPos + searchText.length();

        Spannable spanString = Spannable.Factory.getInstance().newSpannable(wholeText);
        spanString.setSpan(new ForegroundColorSpan(getContext().getResources().getColor(R.color.primary)), startPos, endPos, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        return spanString;
    }

    return new SpannableString(wholeText);
}

1 个答案:

答案 0 :(得分:0)

只需在检查前从搜索字符串中删除空格

searchText= searchText.trim().replace(" ", "");

您的功能将是这样

private Spannable getHighlightedText(String wholeText, String searchText) {


  String searchTextWithOutSpace=searchText.trim().replace(" ", "");


  if (searchText != null && ( wholeText.toLowerCase().contains(searchTextWithOutSpace.toLowerCase()) ||
      //add another condition because mybae user write searchText with space  
      wholeText.toLowerCase().contains(searchText.toLowerCase())) ) {
    int startPos = wholeText.toLowerCase().indexOf(searchText.toLowerCase());
    int endPos = startPos + searchText.length();

    Spannable spanString = Spannable.Factory.getInstance().newSpannable(wholeText);
    spanString.setSpan(new ForegroundColorSpan(getContext().getResources().getColor(R.color.primary)), startPos, endPos, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    return spanString;
  }

  return new SpannableString(wholeText);
}
相关问题