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中的异步任务处理与UI更新技巧

    Android中的异步任务处理与UI更新技巧

    在Android开发中,异步任务处理和UI更新是两个非常重要的概念,本文将详细介绍Android中异步任务的处理方式以及如何在异步任务完成后更新UI,并通过代码示例介绍的非常详细,具有一定的参考价值,需要的朋友可以参考下
    2024-09-09
  • Android仿京东分类效果

    Android仿京东分类效果

    这篇文章主要为大家详细介绍了Android仿京东分类效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Android自定义横向滑动菜单的实现

    Android自定义横向滑动菜单的实现

    这篇文章主要介绍了Android自定义横向滑动菜单的实现,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Android4.4 访问外部存储详解及实例

    Android4.4 访问外部存储详解及实例

    这篇文章主要介绍了Android4.4 访问外部存储详解及实例的相关资料,需要的朋友可以参考下
    2016-10-10
  • Android开发中TextView文本过长滚动显示实现方法分析

    Android开发中TextView文本过长滚动显示实现方法分析

    这篇文章主要介绍了Android开发中TextView文本过长滚动显示实现方法,结合实例形式分析了Android项目开发中TextView显示超长文本的具体操作技巧与注意事项,需要的朋友可以参考下
    2018-02-02
  • android 拍照和上传的实现代码

    android 拍照和上传的实现代码

    怎么把拍照好的图片数据放到gallery中显示又要保存到sdcard上,请看下面的实例
    2013-09-09
  • Android读取本地照片和视频相册实例代码

    Android读取本地照片和视频相册实例代码

    本篇文章主要介绍了Android读取本地照片和视频相册实例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-06-06
  • Android 5.0+ 屏幕录制实现的示例代码

    Android 5.0+ 屏幕录制实现的示例代码

    这篇文章主要介绍了Android 5.0+ 屏幕录制实现的示例代码,从 5.0 开始,系统提供给了 app 录制屏幕的一系列方法,不需要 root 权限,只需要用户授权即可录屏,相对来说较为简单,感兴趣的小伙伴们可以参考一下
    2018-05-05
  • Android实现可滑动的自定义日历控件

    Android实现可滑动的自定义日历控件

    这篇文章主要为大家详细介绍了Android实现可滑动的自定义日历控件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • android4.0屏蔽HOME键的简单实现

    android4.0屏蔽HOME键的简单实现

    这篇文章主要介绍了android4.0屏蔽HOME键的简单实现,需要的朋友可以参考下
    2014-02-02

最新评论