Android 中搜索的关键字变亮

2023-04-06  本文已影响0人  因为我的心

一、前言:

需求: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
    }
上一篇 下一篇

猜你喜欢

热点阅读