大多数App中都有搜索的功能,虽然国内实实在在的遵循Google material design设计语言来设计的App实在不多,但个人感觉MD真的是非常值得研究,这次给大家介绍的是 Material 风格的搜索框MaterialSearchView。

MaterialSearchView Github地址:https://github.com/MiguelCatalan/MaterialSearchView ,强烈建议大家学习学习,虽然只是简单的使用,但是还是整理了一下画了个简单的思维导图。

自己也写了下简单的Demo,下面主要就是围绕怎么实现下面效果记录

1:在module的gradle中添加依赖

 compile 'com.miguelcatalan:materialsearchview:1.4.0'

2:将MaterialSearchView与Toolbar一起添加到布局文件中

     <FrameLayout
android:id="@+id/toolbar_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"> <android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/theme_primary" /> <com.miguelcatalan.materialsearchview.MaterialSearchView
android:id="@+id/search_view"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</FrameLayout>

3:在menu文件夹下新建菜单文件,将搜索项添加到菜单文件中

     <item
android:id="@+id/action_search"
android:icon="@drawable/ic_action_action_search"
android:orderInCategory="100"
android:title="@string/abc_search_hint"
app:showAsAction="always" />

4:在Activity的onCreateOptionsMenu中定义菜单

 @Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_main, menu); MenuItem item = menu.findItem(R.id.action_search);
searchView.setMenuItem(item); return true;
}

5:设置监听,编辑过滤条件

 searchView.setOnQueryTextListener(new MaterialSearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
//Do some magic
return false;
} @Override
public boolean onQueryTextChange(String newText) {
filter(newText);
return true;
}
}); searchView.setOnSearchViewListener(new MaterialSearchView.SearchViewListener() {
@Override
public void onSearchViewShown() {
//Do some magic
} @Override
public void onSearchViewClosed() {
//Do some magic
}
});

6:设置back按钮来关闭搜索视图

     @Override
public void onBackPressed() {
if (searchView.isSearchOpen()) {
searchView.closeSearch();
} else {
super.onBackPressed();
}
}

MaterialSearchView的使用步骤如上,咱们看看第五点的过滤条件的代码

  private void filter(String query) {
try {
List<Person> filterDateList = new ArrayList<Person>();
//当输入框的内容为空时显示全部列表
if (TextUtils.isEmpty(query)) {
filterDateList = datas;
} else {
//清空
filterDateList.clear();
//遍历列表
for (Person person : datas) {
if (person.getName().contains(query.toString())
|| person.getCareer().contains(query.toString())
) {
filterDateList.add(person);
}
}
}
adapter.update(filterDateList);
} catch (Exception e) {
e.printStackTrace();
}
}

我们在RecycleView 的适配器Adapter中添加了一个方法Update.

     public void update(List<Person> list) {
this.datas = list;
notifyDataSetChanged();
}

最新文章

  1. 转:python获取linux系统及性能信息
  2. url中#号的作用
  3. jQuery中的事件冒泡
  4. [C#]exchange发送,收件箱操作类
  5. Python的神奇方法指南
  6. Failed to allocate the network(s), not rescheduling
  7. java 分页
  8. git pre-push hook
  9. javafx安装
  10. Nagios 监控windows server Apache 服务
  11. java学习之路--继承(子类构造器)
  12. H5入门须知
  13. Vue Loader
  14. 第二十二节:Java语言基础-详细讲解位运算符与流程控制语句
  15. 设置 webstorm 对 .vue 高亮
  16. JavaScript 内存泄露以及如何处理
  17. python之生成随机测验试卷
  18. linux文件和目錄管理的基本命令命令
  19. Solr学习之一 --------环境搭建
  20. No MyBatis mapper was found in &#39;[com.wuji.springboot]&#39; package. Please check your configuration

热门文章

  1. MySQLl存储过程学习总结
  2. 《跟我学shiro》
  3. PHP strstr 字符串函数
  4. cell右侧的状态(accessoryType)
  5. RDMA 相关 简要摘录
  6. MYSQL 命令导出事件、存储过程、触发器
  7. leetcode 5199. 交换字符串中的元素
  8. Java Web 学习(7) —— Spring MVC 之国际化
  9. 2019 SDN上机第6次作业
  10. 第05组 Alpha冲刺(1/4)