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入門(mén)教程之組件Activity的生命周期詳解
Activity作為四大組件之一,出現(xiàn)的頻率相當(dāng)高,基本上我們?cè)赼ndroid的各個(gè)地方都能看見(jiàn)它的蹤影,因此深入了解Activity,對(duì)于開(kāi)發(fā)高質(zhì)量應(yīng)用程序是很有幫助的。今天我們就來(lái)詳細(xì)地聊聊Activity的生命周期,以便我們?cè)谝院蟮拈_(kāi)發(fā)中能如魚(yú)得水2021-10-10
Android編程實(shí)現(xiàn)下載圖片及在手機(jī)中展示的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)下載圖片及在手機(jī)中展示的方法,涉及Android針對(duì)圖形文件的遠(yuǎn)程下載及遍歷顯示相關(guān)操作技巧,需要的朋友可以參考下2017-02-02
Android中ViewPager1和ViewPager2的使用教程
這篇文章主要介紹了Android中ViewPager1和ViewPager2的使用,效果圖是結(jié)合BottomNavigationView+ViewPager一起使用的,具體實(shí)例代碼跟隨小編一起看看吧2021-10-10
Windows下搭建Android開(kāi)發(fā)環(huán)境
這篇文章主要介紹了Windows下搭建Android開(kāi)發(fā)環(huán)境,需要的朋友可以參考下2015-09-09
Android App調(diào)試內(nèi)存泄露之Cursor篇
最近在工作中處理了一些內(nèi)存泄露的問(wèn)題,在這個(gè)過(guò)程中我尤其發(fā)現(xiàn)了一些基本的問(wèn)題反而忽略導(dǎo)致內(nèi)存泄露2012-11-11
Android AndBase框架實(shí)現(xiàn)多功能標(biāo)題欄(一)
這篇文章主要整理了Android AndBase框架學(xué)習(xí)筆記,本文主要使用AndBase實(shí)現(xiàn)多功能標(biāo)題欄,感興趣的小伙伴們可以參考一下2016-03-03
Android Kotlin 基本數(shù)據(jù)類(lèi)型詳解
Kotlin是一種靜態(tài)類(lèi)型語(yǔ)言,適用于Android開(kāi)發(fā),Kotlin的基本數(shù)據(jù)類(lèi)型包括數(shù)值類(lèi)型、字符類(lèi)型、布爾類(lèi)型和數(shù)組類(lèi)型,本文介紹Android Kotlin 基本數(shù)據(jù)類(lèi)型,感興趣的朋友一起看看吧2025-03-03
Android Jetpack組件之ViewModel使用詳解
Android中的ViewModel是一個(gè)可以用來(lái)存儲(chǔ)UI相關(guān)的數(shù)據(jù)的類(lèi)。ViewModel的生命周期會(huì)比創(chuàng)建它的Activity、Fragment的生命周期長(zhǎng),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-04-04
Kotlin 集合函數(shù)map 和 first 的使用場(chǎng)景分析
Kotlin 提供了許多強(qiáng)大的集合操作函數(shù),其中 map 適用于轉(zhuǎn)換集合,first 適用于獲取符合條件的第一個(gè)元素,這篇文章給大家介紹Kotlin 集合函數(shù):map 和 first 的使用場(chǎng)景,感興趣的朋友一起看看吧2025-04-04

