Android实现关键字匹配,关键字部分置蓝

做地图开发需求,有一个搜索关键字匹配的需求,需要做到关键字的匹配置蓝的操作

分享一下个人的思考,请各位大佬斧正

1.自定义TextView

Kotlin 复制代码
class HighlightedTextView @JvmOverloads constructor(


    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
) : AppCompatTextView(context, attrs, defStyleAttr) {
    private  val TAG = "HighlightedTextView"

    private var highlightColor = Color.BLUE
    private var keywords: List<String> = emptyList()
    private var textWords:String = "";



    fun setKeywords(keywords: String,textWords:String) {
        this.textWords = textWords;
        this.keywords = keywords.toList().map { it.toString() }.toMutableList()
        postInvalidate()
    }


    override fun onDraw(canvas: Canvas) {

        val paint = paint
        val originalColor = Color.BLACK


        val lines = textWords.split("\n")

        for (line in lines) {
            val words = line.split("")
            var x = 0f

            for (word in words) {
                if (keywords.any { word.contains(it, ignoreCase = true) }) {
                    paint.color = highlightColor
                } else {
                    paint.color = originalColor
                }
                canvas.drawText(word , x, baseline.toFloat(), paint)
                x += paint.measureText(word)
            }
        }
    }
}

2.XML中调用

这里截取了部分,可以根据需求来修改

XML 复制代码
 <com.cariad.map.view.HighlightedTextView
        android:id="@+id/item_search_name"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:paddingRight="24dp"
        android:textStyle="bold"
        android:maxLines="1"
        android:singleLine="true"
        android:text="杭州西湖风景名胜区"
        android:textColor="#000000"
        android:textSize="28sp"
        app:layout_constraintRight_toLeftOf="@id/item_search_result_send"
        app:layout_constraintLeft_toRightOf="@id/item_search_marker_icon"
        app:layout_constraintTop_toTopOf="parent">

</com.cariad.map.view.HighlightedTextView>

3.代码中调用

Kotlin 复制代码
  holder.searchResultName.setKeywords(keywords, result.poiItemV2.title)

4.最终效果

相关推荐
梅菲塔亚6 分钟前
Keepalived高可用全解析
linux·运维·服务器·开发语言·网络·php
依然鸣24 分钟前
PTA团体程序设计天梯赛L2真题讲解L2-005-008
开发语言·数据结构·c++·算法·深度优先·pat考试·图论
君顾11 小时前
代驾跑腿业务系统实战开发指南
java·开发语言·代驾跑腿
雨声不在1 小时前
docker-android 重启后镜像起不来
android·docker·容器
阿pin1 小时前
Android随笔-Framework
android·framework
夏幻灵1 小时前
从语法坑点到 JS 内存底层:Vue 3 watch 侦听器深度全解
开发语言·javascript·vue.js
达达尼昂1 小时前
Flutter AI Harness 如何让 Agent 参与软件开发全流程
android·人工智能·后端
sRect2 小时前
用ESP32-S3开发板开发一个接收消息的BB机
android·serverless·嵌入式
k4m7v2pz2 小时前
Rust 长跑守护进程日志治理:切分、时区与结构化
开发语言·后端·rust·日志系统·日志轮转·ndjson
FfHUCisI2 小时前
Golang RESTful API 设计原则
开发语言·golang·restful