Android实现高亮搜索功能的示例

Damara ·
更新时间:2024-11-10
· 481 次阅读

目录

首先看效果图:

使用方法:

1、普通场景使用

2、在DataBinding中使用

首先看效果图:

整词高亮:

分词高亮:

下面贴上我封的方法

/** * 关键字高亮显示 * 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实现高亮搜索的资料请关注软件开发网其它相关文章!



示例 高亮 Android

需要 登录 后方可回复, 如果你还没有账号请 注册新账号