android 仿支付宝搜索,Android 仿支付宝搜索结果页,字符串部分文字显示高亮

概述

最近收到一个需求就是,搜索的关键词,在搜索结果页的搜索条目上高亮显示。类似于支付宝搜索结果页的效果。经过一番思虑之后,感觉还是比较简单的,直接上代码。

效果

7198ff69ac64?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

image

代码

/**

* 字符串高亮显示部分文字

* @param textView 控件

* @param str1 要高亮显示的文字(输入的关键词)

* @param str2 包含高亮文字的字符串

*/

private void setTextHighLight(TextView textView, String str1, String str2) {

SpannableString sp = new SpannableString(str2);

// 遍历要显示的文字

for (int i = 0 ; i < str1.length() ; i ++){

// 得到单个文字

String s1 = str1.charAt(i) + "";

// 判断字符串是否包含高亮显示的文字

if (str2.contains(s1)){

// 查找文字在字符串的下标

int index = str2.indexOf(s1);

// 循环查找字符串中所有该文字并高亮显示

while (index != -1) {

ForegroundColorSpan colorSpan = new ForegroundColorSpan(Color.parseColor("#db384c"));

sp.setSpan(colorSpan, index, index + 1, Spanned.SPAN_INCLUSIVE_EXCLUSIVE);

// s1从这个索引往后开始第一个出现的位置

index = str2.indexOf(s1, index + 1);

}

}

}

// 设置控件

textView.setText(sp);

}

注意

为了能很好的理解代码,代码的关键位置的注释还是比较多的,就不多用文字解释了。

代码并不是很完善,根据不同的需求,可能还需要考虑中文、英文、中文字符、以及英文字符的过滤,如果有这方面的需求可以在网络上搜索一下相关的功能实现,相关介绍还是比较多的。

补充一

TextView设置高亮,有多种实现方式,通过HTML,SpannableString都可以实现。还有待总结,先把遇到的情况就下来

通过正则来过滤关键字,设置高亮。主要通过两个类Pattern和Matcher具体代码如下

/**

* TextView 显示高亮

* @param view

* @param str1 要高亮显示的文字(输入的关键词)

* @param str2 包含高亮文字的字符串

*/

private void initHighLight(TextView view, String str1, String str2) {

textView = (TextView) findViewById(R.id.textView);

SpannableString sp = new SpannableString(str2);

for (int i = 0 ; i < str1.length() ; i++){

String s = String.valueOf(str1.charAt(i));

// 正则匹配

Pattern p = Pattern.compile(s);

Matcher m = p.matcher(sp);

// 查找下一个

while (m.find()) {

// 字符开始下标

int start = m.start();

// 字符结束下标

int end = m.end();

// 设置高亮

sp.setSpan(new ForegroundColorSpan(Color.RED), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

}

}

view.setText(sp);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值