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

作者:G_452 时间:2021-06-13 19:25:02 

目录
  • 首先看效果图:

  • 使用方法:

    • 1、普通场景使用

    • 2、在DataBinding中使用

首先看效果图:

整词高亮:

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}" />

搞定!

来源:https://juejin.cn/post/6959484197178179621

标签:Android,高亮,搜索
0
投稿

猜你喜欢

  • C语言实现2D赛车游戏的示例代码

    2022-04-03 05:57:33
  • 详解Android中点击事件的几种实现方式

    2022-07-03 09:05:09
  • 基于Spring p标签和c标签注入方式

    2023-11-25 22:26:36
  • OpenCV画任意圆弧曲线

    2023-06-22 19:28:44
  • android 通过MediaRecorder实现简单的录音示例

    2023-07-29 06:03:54
  • C#(WinForm) ComboBox和ListBox添加项及设置默认选择项

    2022-05-13 10:09:49
  • Java并发编程之Fork/Join框架的理解

    2023-09-30 14:14:01
  • Java源码解析之详解ImmutableMap

    2023-11-23 08:06:07
  • Java面试题冲刺第二十九天--JVM3

    2021-05-24 05:34:26
  • C#操作DataTable的实现步骤

    2021-06-04 13:20:23
  • java并发编程专题(六)----浅析(JUC)Semaphore

    2023-07-27 23:30:28
  • Android生成带圆角的Bitmap图片

    2022-09-08 11:18:19
  • Java png图片修改像素rgba值的操作

    2022-08-11 06:57:21
  • C#用链式方法表达循环嵌套

    2023-04-14 06:54:23
  • Android实现SQLite添加、更新及删除行的方法

    2022-03-29 05:23:45
  • C#实现IDisposable接口释放非托管资源

    2022-12-01 06:59:53
  • C#基于NPOI生成具有精确列宽行高的Excel文件的方法

    2022-12-18 13:32:46
  • Android使用ContentResolver搜索手机通讯录的方法

    2021-12-28 08:33:16
  • Java的Spring框架下的AOP编程模式示例

    2023-11-02 00:52:25
  • Java实现最小生成树算法详解

    2023-11-25 04:51:22
  • asp之家 软件编程 m.aspxhome.com