Android 优雅的实现高亮搜索功能

Android 优雅的实现高亮搜索功能,第1张

概述首先看效果图:整词高亮:分词高亮:下面贴上我封的方法/***关键字高亮显示*text原文*keyWord需要高亮显示的关键字*isCut是否需要做分词高亮展示*isCut=true关键字里的每一个字,只要有都会高亮*isCut=false(默认)只有整词才会高亮**/fu 首先看效果图:

整词高亮:

分词高亮:


下面贴上我封的方法

 /** *  关键字高亮显示 *  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 优雅的实现高亮搜索功能所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1010422.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存