Android实现高亮搜索功能的示例
整词高亮:
分词高亮:
下面贴上我封的方法
/** * 关键字高亮显示 * 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: Stringfor (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中绑定
<TextViewandroid: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实现高亮搜索的资料请关注好吧啦网其它相关文章!
相关文章: