Android實(shí)現(xiàn)高亮搜索功能的示例
首先看效果圖:
整詞高亮:
分詞高亮:
下面貼上我封的方法
/** * 關(guān)鍵字高亮顯示 * text 原文 * keyWord 需要高亮顯示的關(guān)鍵字 * isCut 是否需要做分詞高亮展示 * isCut = true 關(guān)鍵字里的每一個(gè)字,只要有都會(huì)高亮 * isCut = false(默認(rèn)) 只有整詞才會(huì)高亮 **/ 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、普通場(chǎng)景使用
//整詞搜索 isCut可不傳
stringToHighLight("原文", "關(guān)鍵字")
//分詞搜索
stringToHighLight("原文", "關(guān)鍵字",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實(shí)現(xiàn)高亮搜索功能的示例的詳細(xì)內(nèi)容,更多關(guān)于Android實(shí)現(xiàn)高亮搜索的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- Android 搜索結(jié)果匹配關(guān)鍵字且高亮顯示功能
- Android搜索結(jié)果顯示高亮實(shí)例(有數(shù)據(jù)滑動(dòng)底部自動(dòng)刷新)
- Android基于RecyclerView實(shí)現(xiàn)高亮搜索列表
- Android Studio實(shí)現(xiàn)搜索欄
- android通過(guò)拼音搜索中文的功能實(shí)現(xiàn)代碼
- Android自定義流式布局實(shí)現(xiàn)淘寶搜索記錄
- Android本地實(shí)現(xiàn)搜索歷史記錄
- Android實(shí)現(xiàn)搜索歷史功能
- Android輸入框?qū)崟r(shí)模糊搜索效果的示例代碼
- Android Studio3.6.+ 插件搜索不到終極解決方案(圖文詳解)
相關(guān)文章
Android自定義橫向滑動(dòng)菜單的實(shí)現(xiàn)
這篇文章主要介紹了Android自定義橫向滑動(dòng)菜單的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-05-05Android4.4 訪問(wèn)外部存儲(chǔ)詳解及實(shí)例
這篇文章主要介紹了Android4.4 訪問(wèn)外部存儲(chǔ)詳解及實(shí)例的相關(guān)資料,需要的朋友可以參考下2016-10-10Android開(kāi)發(fā)中TextView文本過(guò)長(zhǎng)滾動(dòng)顯示實(shí)現(xiàn)方法分析
這篇文章主要介紹了Android開(kāi)發(fā)中TextView文本過(guò)長(zhǎng)滾動(dòng)顯示實(shí)現(xiàn)方法,結(jié)合實(shí)例形式分析了Android項(xiàng)目開(kāi)發(fā)中TextView顯示超長(zhǎng)文本的具體操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-02-02Android讀取本地照片和視頻相冊(cè)實(shí)例代碼
本篇文章主要介紹了Android讀取本地照片和視頻相冊(cè)實(shí)例代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06Android 5.0+ 屏幕錄制實(shí)現(xiàn)的示例代碼
這篇文章主要介紹了Android 5.0+ 屏幕錄制實(shí)現(xiàn)的示例代碼,從 5.0 開(kāi)始,系統(tǒng)提供給了 app 錄制屏幕的一系列方法,不需要 root 權(quán)限,只需要用戶授權(quán)即可錄屏,相對(duì)來(lái)說(shuō)較為簡(jiǎn)單,感興趣的小伙伴們可以參考一下2018-05-05Android實(shí)現(xiàn)可滑動(dòng)的自定義日歷控件
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)可滑動(dòng)的自定義日歷控件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07android4.0屏蔽HOME鍵的簡(jiǎn)單實(shí)現(xiàn)
這篇文章主要介紹了android4.0屏蔽HOME鍵的簡(jiǎn)單實(shí)現(xiàn),需要的朋友可以參考下2014-02-02