首先的效果图

搜索到结果(这里我只是模拟数据,真正和服务器走得时候,返回来的数据都应该包含关键字的)
模拟的没有搜索结果的界面
具体实现
在这插一句哈,就是做一件事情,拆分成多个小结,不至于在开发的时候摸不着头脑而且还能把控开发的进度.
思路其实很简单,我们监听输入框的变化,然后在文字变化之后去请求服务器,然后取到我们需要的结果,进行数据展示即可.
第一步:搜索框的监听
et_search.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
/**
* 当搜索框中的文字发生变化的时候回调此方法
* @param charSequence 输入框的文字
* @param start 开始
* @param before
* @param count 字数
*/
@Override
public void onTextChanged(CharSequence charSequence, int start, int before, int count) {
//在这里进行逻辑请求
}
@Override
public void afterTextChanged(Editable s) {
}
});
第二步:进行相关逻辑请求
```
if (!TextUtils.isEmpty(charSequence) && charSequence.length() > 3) { //这里的3只是为了模拟请求
mKey = charSequence.toString();
initData(charSequence.toString());
changeStates(STATE);
} else {
STATE = NO_TTHING;
changeStates(STATE);
}
/**
* 首次获取数据
*
* @param key 高亮值
*/
private void initData(String key) {
//这里是模拟网络请求的 实际就是走网络获取数据
String result = JsonUtils.getJson(this, "search.json");
Gson gson = new Gson();
SearchBean searchBean = gson.fromJson(result, SearchBean.class);
if (searchBean != null) {
mDataBeen = searchBean.getData();
if (mDataBeen != null && mDataBeen.size() > 0) {
STATE = SHOW_DATA;
mSearchAdapter.loadData(mDataBeen, key);
} else {
STATE = NO_TTHING;
}
} else {
STATE = NO_TTHING;
}
}
/**
* 改变搜索状态
*
* @param state 搜*ey值
*/
private void changeStates(int state) {
switch (state) {
case NO_TTHING:
mNoLayout.setVisibility(View.VISIBLE);
recycler_view.setVisibility(View.INVISIBLE);
break;
case SHOW_DATA:
mNoLayout.setVisibility(View.GONE);
recycler_view.setVisibility(View.VISIBLE);
break;
}
}
第三步:进行变色
/**
* @param context 上下文
* @param wholeStr 全部文字
* @param highlightStr 改变颜色的文字
* @param color 颜色
*/
public StringFormatUtil(Context context, String wholeStr, String highlightStr, int color) {
this.mContext = context;
this.wholeStr = wholeStr;
this.highlightStr = highlightStr;
this.color = color;
}
/**
* 填充颜色
*
* @return StringFormatUtil
*/
public StringFormatUtil fillColor() {
if (!TextUtils.isEmpty(wholeStr) && !TextUtils.isEmpty(highlightStr)) {
spBuilder = new SpannableStringBuilder(wholeStr);
//匹配规则
Pattern p = Pattern.compile(highlightStr);
//匹配字段
Matcher m = p.matcher(spBuilder);
//上色
color = mContext.getResources().getColor(color);
//开始循环查找里面是否包含关键字 使得一句话中出现多个关键词都会被高亮
while (m.find()) {
int start = m.start();
int end = m.end();
spBuilder.setSpan(new ForegroundColorSpan(color), start, end, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
}
return this;
}
return null;
}
/**
* 获取到已经更改好的结果(这个时候已经实现了高亮,在获取这个result的时候不要toString()要不然会把色调去除的)
*
* @return result
*/
public SpannableStringBuilder getResult() {
if (spBuilder != null) {
return spBuilder;
}
return null;
}
// 进行工具类使用,也就是在给title赋值的时候使用
//这个是adapter里面的使用规则
mFormatUtil = new StringFormatUtil(holder.itemView.getContext(), dataBean.getTitle(), mLightStr, R.color.colorAccent).fillColor();
holder.tv_title.setText(mFormatUtil.getResult());
```
Demo说明
这里的本地的json是我自己人为定义的,而且在搜索的时候加入了自己的逻辑,如果是实际工程中需要自己根据自己的需求来进行变更的.相关显示不需要在意,这里只是给大家一个实现搜索的并且关键词高亮的一个思路。
Demo代码传送门:https://github.com/wuyinlei/SearchViewDemo
下载地址:SearchViewDemo_jb51.rar
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# android
# 搜索高亮
# 搜索关键字高亮
# 拼音搜索高亮
# Android 搜索结果匹配关键字且高亮显示功能
# Android基于RecyclerView实现高亮搜索列表
# Android Studio实现搜索栏
# android通过拼音搜索中文的功能实现代码
# Android自定义流式布局实现淘宝搜索记录
# Android本地实现搜索历史记录
# Android实现搜索历史功能
# Android输入框实时模糊搜索效果的示例代码
# Android Studio3.6.+ 插件搜索不到终极解决方案(图文详解)
# Android实现高亮搜索功能的示例
# 关键词
# 自己的
# 多个
# 输入框
# 是在
# 在这里
# 首次
# 也就
# 一句
# 在这
# 下载地址
# 不需要
# 摸不着头脑
# 给大家
# 这个时候
# 能把
# 会把
# 搜索结果
# 句话
# 走得
相关文章:
如何快速搭建支持数据库操作的智能建站平台?
深圳网站制作培训,深圳哪些招聘网站比较好?
婚礼视频制作网站,学习*后期制作的网站有哪些?
建站主机选购指南:核心配置与性价比推荐解析
电脑免费海报制作网站推荐,招聘海报哪个网站多?
Python文件管理规范_工程实践说明【指导】
高端建站三要素:定制模板、企业官网与响应式设计优化
广州建站公司哪家好?十大优质服务商推荐
黑客如何通过漏洞一步步攻陷网站服务器?
如何选择域名并搭建高效网站?
网站制作价目表怎么做,珍爱网婚介费用多少?
如何通过FTP服务器快速搭建网站?
大同网页,大同瑞慈医院官网?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
建站之星如何助力企业快速打造五合一网站?
小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
建站之星官网登录失败?如何快速解决?
如何在云主机快速搭建网站站点?
建站主机是什么?如何选择适合的建站主机?
购物网站制作公司有哪些,哪个购物网站比较好?
如何用PHP快速搭建CMS系统?
seo网站制作优化,网站SEO优化步骤有哪些?
模具网站制作流程,如何找模具客户?
如何打造高效商业网站?建站目的决定转化率
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
深圳网站制作费用多少钱,读秀,深圳文献港这样的网站很多只提供网上试读,但有些人只要提供试读的文章就能全篇下载,这个是怎么弄的?
如何选择可靠的免备案建站服务器?
南宁网站建设制作定制,南宁网站建设可以定制吗?
高性价比服务器租赁——企业级配置与24小时运维服务
Python lxml的etree和ElementTree有什么区别
小捣蛋自助建站系统:数据分析与安全设置双核驱动网站优化
如何在宝塔面板中修改默认建站目录?
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
建站之星如何取消后台验证码生成?
学校免费自助建站系统:智能生成+拖拽设计+多端适配
常州企业建站如何选择最佳模板?
建站主机SSH密钥生成步骤及常见问题解答?
个人摄影网站制作流程,摄影爱好者都去什么网站?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
如何快速生成高效建站系统源代码?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
C#如何序列化对象为XML XmlSerializer用法
做企业网站制作流程,企业网站制作基本流程有哪些?
css网站制作参考文献有哪些,易聊怎么注册?
*请认真填写需求信息,我们会在24小时内与您取得联系。