一、前言:
需求:java 字符串中的搜索的关键词变亮
效果图:
效果图.png字符串数字变亮的地址
:https://www.jianshu.com/p/fab20115165b
二、代码实现:
1、调用
val spannableStringBuilder = getSpannableKeyString(context, item, "11111")
tvContent.text = spannableStringBuilder
2、功能实现
/**
* 文字中的选中字变橘黄色
*/
fun getSpannableKeyString(
context: Context,
content: String? = null,
regex:String
): SpannableStringBuilder? {
content?.let {
val style = SpannableStringBuilder(it)
//去除key中重复的字符
val set: MutableSet<Char> = HashSet()
for (c in regex.toCharArray()) {
set.add(c)
}
//for循环字符变色
set.forEach { newRegex ->
if (content.contains(newRegex)){
//查找所有包含字符的下标
val list = findAllOccurrences(content,newRegex)
list.forEach { index->
//字体颜色设置
style.setSpan(
ForegroundColorSpan(context.resources.getColor(R.color.color_FDA924)),
index,
index+1,
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE
)
}
}
}
return style
}
return null
}
/**
* 查找字符的下标的数组
*/
var result = arrayListOf<Int>();
fun findAllOccurrences(str:String, key:Char):ArrayList<Int> {
result.clear()
var index = str.indexOf(key)
while (index !== -1) {
result.add(index)
index = str.indexOf(key, index + 1)
}
return result
}
网友评论