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、Data Bindingで使用する
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が高亮検索を実現するための資料については、他の関連記事に注目してください。