全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Android搜索结果显示高亮实例(有数据滑动底部自动刷新)

首先的效果图

搜索到结果(这里我只是模拟数据,真正和服务器走得时候,返回来的数据都应该包含关键字的)

模拟的没有搜索结果的界面

具体实现

在这插一句哈,就是做一件事情,拆分成多个小结,不至于在开发的时候摸不着头脑而且还能把控开发的进度.

思路其实很简单,我们监听输入框的变化,然后在文字变化之后去请求服务器,然后取到我们需要的结果,进行数据展示即可.

第一步:搜索框的监听

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小时内与您取得联系。