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

 更新时间:2021年05月08日 09:14:48   作者:G_452  
这篇文章主要介绍了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 studio 混淆+打包+验证是否成功

    Android studio 混淆+打包+验证是否成功

    本文主要介绍了Android studio 混淆+打包+验证是否成功的相关知识,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • Android实现多点触控功能

    Android实现多点触控功能

    这篇文章主要为大家详细介绍了Android实现多点触控功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Kotlin学习教程之函数的默认参数

    Kotlin学习教程之函数的默认参数

    这篇文章主要给大家介绍了关于Kotlin学习教程之函数的默认参数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Android ContentProvider实现获取手机联系人功能

    Android ContentProvider实现获取手机联系人功能

    这篇文章主要为大家详细介绍了Android ContentProvider实现获取手机联系人功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • Android中Fragment 真正的完全解析(上)

    Android中Fragment 真正的完全解析(上)

    本篇文章主要介绍了Android中Fragment完全解析,具有一定的参考价值,有需要的可以了解一下。
    2016-11-11
  • ExpandListView实现下拉列表案例

    ExpandListView实现下拉列表案例

    这篇文章主要为大家详细介绍了ExpandListView实现下拉列表案例,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-08-08
  • 使用Chrome浏览器调试Android App详解

    使用Chrome浏览器调试Android App详解

    这篇文章主要介绍了使用Chrome浏览器调试Android App详解,本网讲解了使用Facebook开源Stetho实现在Chrome中调试Android App中,需要的朋友可以参考下
    2015-05-05
  • Android开发实现自定义新闻加载页面功能实例

    Android开发实现自定义新闻加载页面功能实例

    这篇文章主要介绍了Android开发实现自定义新闻加载页面功能,结合具体实例形式分析了Android界面加载及页面布局相关操作技巧,需要的朋友可以参考下
    2017-10-10
  • Android MPChart自定义睡眠泳道图教程示例

    Android MPChart自定义睡眠泳道图教程示例

    这篇文章主要为大家介绍了Android MPChart自定义睡眠泳道图教程示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Flutter系统网络图片加载流程解析

    Flutter系统网络图片加载流程解析

    这篇文章主要介绍了Flutter系统网络图片加载流程,从构造函数开始说起,我们以最简单的调用方式举例,当我们使用Image.network(imageUrl)这种方式来显示图片时,Image组件内部image属性就会被赋值NetworkImage,具体操作步骤跟随小编一起看看吧
    2022-05-05

最新评论