整词高亮:
分词高亮:
/** * 关键字高亮显示 * text 原文 * keyWord 需要高亮显示的关键字 * isCut 是否需要做分词高亮展示 * isCut = true 关键字里的每一个字,只要有都会高亮 * isCut = false(默认) 只有整词才会高亮 **/fun stringToHighlight(text: String, keyWord: String, isCut: Boolean = false): SpannableStringBuilder { val spannable = SpannableStringBuilder(text) try { var keyword: MutableList<String> = ArrayList() if (isCut) { for (i in keyWord.indices) { keyword.add(keyWord.substring(i, i + 1)) } } else { keyword = arraylistof(keyWord) } var span: CharacterStyle? var wordReg: String for (i in keyword.indices) { var key = "" // 处理通配符问题 if (keyword[i].contains("*") || keyword[i].contains("(") || keyword[i].contains(")")) { val chars = keyword[i].tochararray() for (k in chars.indices) { key = if (chars[k] == '*' || chars[k] == '(' || chars[k] == ')') { key + "\" + chars[k].toString() } else { key + chars[k].toString() } } keyword[i] = key } wordReg = "(?i)" + keyword[i] //忽略字母大小写 val pattern: Pattern = Pattern.compile(wordReg) val matcher: Matcher = pattern.matcher(text) while (matcher.find()) { span = ForegroundcolorSpan(color.parsecolor("#4599F7")) spannable.setSpan(span, matcher.start(), matcher.end(), Spannable.SPAN_MARK_MARK) } } } catch (e: Exception) { LogUtil.d("stringToHighlight-Error-------->$e") } return spannable}
使用方法:1、普通场景使用
//整词搜索 isCut可不传
stringToHighlight("原文", "关键字")
//分词搜索
stringToHighlight("原文", "关键字",true)
2、在DataBinding中使用
1):定义BindingAdapter
@BindingAdapter("app:setHighlightText", "app:setHightkeyWord")fun setHighlightText(vIEw: TextVIEw, content: String?, keyWord: String) {content?.let { vIEw.text = stringToHighlight(it, keyWord) }}
2):在xml中绑定
<TextVIEw androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:textcolor="@{itemmodel.isRead?@color/readcolor:@color/noreadcolor}" androID:textSize="14sp" androID:textStyle="bold" app:layout_constrainttop_totopOf="parent" app:setHighlightText="@{itemmodel.Title}" app:setHightkeyWord="@{viewmodel.keyString}" />
搞定! 总结 以上是内存溢出为你收集整理的Android 优雅的实现高亮搜索功能全部内容,希望文章能够帮你解决Android 优雅的实现高亮搜索功能所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)