Android 优雅的实现高亮搜索功能
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Android 优雅的实现高亮搜索功能,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2090字,纯文字阅读大概需要3分钟。
内容图文
![Android 优雅的实现高亮搜索功能](/upload/InfoBanner/zyjiaocheng/996/688cadfbe2f440b2a775e6b26b8ae662.jpg)
首先看效果图:
整词高亮:
分词高亮:
下面贴上我封的方法
/**
* 关键字高亮显示
* 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 优雅的实现高亮搜索功能所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。