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

2021-06-19 0 479

首先看效果图:

整词高亮:

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

分词高亮:

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: 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 Android实现高亮搜索功能的示例 http://www.ox520.com/24154.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务