最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android實(shí)現(xiàn)高亮搜索功能的示例

 更新時(shí)間:2021年05月08日 09:14:48   作者:G_452  
這篇文章主要介紹了Android實(shí)現(xiàn)高亮搜索功能的示例,幫助大家更好的理解和學(xué)習(xí)使用Android開發(fā),感興趣的朋友可以了解下

首先看效果圖:

整詞高亮:

分詞高亮:

下面貼上我封的方法

 /**
 *  關(guān)鍵字高亮顯示
 *  text  原文
 *  keyWord 需要高亮顯示的關(guān)鍵字
 *  isCut 是否需要做分詞高亮展示
 *  isCut = true  關(guān)鍵字里的每一個(gè)字,只要有都會高亮
 *  isCut = false(默認(rèn)) 只有整詞才會高亮
 **/
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("原文", "關(guān)鍵字")

//分詞搜索

stringToHighLight("原文", "關(guān)鍵字",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實(shí)現(xiàn)高亮搜索功能的示例的詳細(xì)內(nèi)容,更多關(guān)于Android實(shí)現(xiàn)高亮搜索的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Android入門教程之組件Activity的生命周期詳解

    Android入門教程之組件Activity的生命周期詳解

    Activity作為四大組件之一,出現(xiàn)的頻率相當(dāng)高,基本上我們在android的各個(gè)地方都能看見它的蹤影,因此深入了解Activity,對于開發(fā)高質(zhì)量應(yīng)用程序是很有幫助的。今天我們就來詳細(xì)地聊聊Activity的生命周期,以便我們在以后的開發(fā)中能如魚得水
    2021-10-10
  • Android編程實(shí)現(xiàn)下載圖片及在手機(jī)中展示的方法

    Android編程實(shí)現(xiàn)下載圖片及在手機(jī)中展示的方法

    這篇文章主要介紹了Android編程實(shí)現(xiàn)下載圖片及在手機(jī)中展示的方法,涉及Android針對圖形文件的遠(yuǎn)程下載及遍歷顯示相關(guān)操作技巧,需要的朋友可以參考下
    2017-02-02
  • Android中ViewPager1和ViewPager2的使用教程

    Android中ViewPager1和ViewPager2的使用教程

    這篇文章主要介紹了Android中ViewPager1和ViewPager2的使用,效果圖是結(jié)合BottomNavigationView+ViewPager一起使用的,具體實(shí)例代碼跟隨小編一起看看吧
    2021-10-10
  • Windows下搭建Android開發(fā)環(huán)境

    Windows下搭建Android開發(fā)環(huán)境

    這篇文章主要介紹了Windows下搭建Android開發(fā)環(huán)境,需要的朋友可以參考下
    2015-09-09
  • Android App調(diào)試內(nèi)存泄露之Cursor篇

    Android App調(diào)試內(nèi)存泄露之Cursor篇

    最近在工作中處理了一些內(nèi)存泄露的問題,在這個(gè)過程中我尤其發(fā)現(xiàn)了一些基本的問題反而忽略導(dǎo)致內(nèi)存泄露
    2012-11-11
  • Android AndBase框架實(shí)現(xiàn)多功能標(biāo)題欄(一)

    Android AndBase框架實(shí)現(xiàn)多功能標(biāo)題欄(一)

    這篇文章主要整理了Android AndBase框架學(xué)習(xí)筆記,本文主要使用AndBase實(shí)現(xiàn)多功能標(biāo)題欄,感興趣的小伙伴們可以參考一下
    2016-03-03
  • Android Kotlin 基本數(shù)據(jù)類型詳解

    Android Kotlin 基本數(shù)據(jù)類型詳解

    Kotlin是一種靜態(tài)類型語言,適用于Android開發(fā),Kotlin的基本數(shù)據(jù)類型包括數(shù)值類型、字符類型、布爾類型和數(shù)組類型,本文介紹Android Kotlin 基本數(shù)據(jù)類型,感興趣的朋友一起看看吧
    2025-03-03
  • Android Jetpack組件之ViewModel使用詳解

    Android Jetpack組件之ViewModel使用詳解

    Android中的ViewModel是一個(gè)可以用來存儲UI相關(guān)的數(shù)據(jù)的類。ViewModel的生命周期會比創(chuàng)建它的Activity、Fragment的生命周期長,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2023-04-04
  • Android中你可能不知道的Fragment妙用

    Android中你可能不知道的Fragment妙用

    自從Android 3.0中引入fragments 的概念,根據(jù)詞海的翻譯可以譯為:碎片、片段。下面這篇文章主要給大家分享了關(guān)于Android中你可能不知道的Fragment妙用,對大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下。
    2017-07-07
  • Kotlin 集合函數(shù)map 和 first 的使用場景分析

    Kotlin 集合函數(shù)map 和 first 的使用場景分析

    Kotlin 提供了許多強(qiáng)大的集合操作函數(shù),其中 map 適用于轉(zhuǎn)換集合,first 適用于獲取符合條件的第一個(gè)元素,這篇文章給大家介紹Kotlin 集合函數(shù):map 和 first 的使用場景,感興趣的朋友一起看看吧
    2025-04-04

最新評論

且末县| 铁岭市| 盖州市| 黑水县| 高清| 宁津县| 文昌市| 安西县| 大名县| 长岭县| 潼关县| 郎溪县| 龙岩市| 乐都县| 芦溪县| 皋兰县| 邵武市| 凤凰县| 丹巴县| 谢通门县| 龙口市| 昂仁县| 安康市| 长治县| 无极县| 胶南市| 双鸭山市| 金坛市| 兴和县| 内丘县| 镇赉县| 卓尼县| 弥渡县| 华蓥市| 蓬莱市| 朝阳市| 吐鲁番市| 庆安县| 罗田县| 宁夏| 蒙自县|