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实现高亮搜索功能的示例 的全部内容, 来源链接: utcz.com/p/243515.html

回到顶部