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.最终效果

相关推荐
我很好我还能学14 分钟前
【面试篇 9】c++生成可执行文件的四个步骤、悬挂指针、define和const区别、c++定义和声明、将引用作为返回值的好处、类的四个缺省函数
开发语言·c++
蓝婷儿35 分钟前
6个月Python学习计划 Day 16 - 面向对象编程(OOP)基础
开发语言·python·学习
渣渣盟1 小时前
基于Scala实现Flink的三种基本时间窗口操作
开发语言·flink·scala
糯米导航1 小时前
Java毕业设计:办公自动化系统的设计与实现
java·开发语言·课程设计
糯米导航1 小时前
Java毕业设计:WML信息查询与后端信息发布系统开发
java·开发语言·课程设计
MessiGo2 小时前
Javascript 编程基础(5)面向对象 | 5.1、构造函数实例化对象
开发语言·javascript·原型模式
大霞上仙2 小时前
nonlocal 与global关键字
开发语言·python
galaxy_strive2 小时前
绘制饼图详细过程
开发语言·c++·qt
androidwork2 小时前
Android LinearLayout、FrameLayout、RelativeLayout、ConstraintLayout大混战
android·java·kotlin·androidx
每次的天空2 小时前
Android第十三次面试总结基础
android·面试·职场和发展