04/25
2013

Android SearchView介绍及搜索提示实现

本文主要介绍SearchView的使用、即时搜索提示功能的实现,以及一些设置。

 

具体代码可见SearchViewDemo@Github,可实现效果如下:

Demo APK 可以方便的查看效果,在各大应用商店搜索 trinea android 下载即可,如:Google Play

SearchView

1. layout文件

xml中主要配置有四个属性,如下:

android:iconifiedByDefault表示搜索图标是否在输入框内。true效果更加
android:imeOptions设置IME options,即输入法的回车键的功能,可以是搜索、下一个、发送、完成等等。这里actionSearch表示搜索
android:inputType输入框文本类型,可控制输入法键盘样式,如numberPassword即为数字密码样式
android:queryHint输入框默认文本

 

2. java部分代码
SearchView几个主要函数
setOnCloseListener(SearchView.OnCloseListener listener)表示点击取消按钮listener,默认点击搜索输入框
setOnQueryTextListener(SearchView.OnQueryTextListener listener)表示输入框文字listener,包括public boolean onQueryTextSubmit(String query)开始搜索listener,public boolean onQueryTextChange(String newText)输入框内容变化listener,两个函数,下面代码包含了如何利用延迟执行实现搜索提示

上面代码在onQueryTextChange函数即输入框内容每次变化时将一个数据获取线程SearchTipThread放到ScheduledExecutorService中,500ms后执行,在线程执行时判断当前输入框内容和要搜索内容,若相等则继续执行,否则直接返回,避免不必要的数据获取和多个搜索提示同时出现。

 

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE
| WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
表示默认输入法弹出

 

编辑框内容为空点击取消的x按钮,编辑框收缩,可在onClose中返回true

searchView.onActionViewExpanded();表示在内容为空时不显示取消的x按钮,内容不为空时显示.

searchView.setSubmitButtonEnabled(true);编辑框后显示search按钮,个人建议用android:imeOptions=”actionSearch”代替。

 

隐藏输入法键盘

其中SearchActivity为Activity的类名

优秀人才不缺工作机会,只缺适合自己的好机会。但是他们往往没有精力从海量机会中找到最适合的那个。
100offer 会对平台上的人才和企业进行严格筛选,让「最好的人才」和「最好的公司」相遇。
注册 100offer,谈谈你对下一份工作的期待。一周内,收到 5-10 个满足你要求的好机会!
  1. 给延迟搜索提个小建议。
    比如我清空了SearchView中的文字,本来根据Listener中的判断要执行其他操作(比如显示一个新的fragmentA),结果因为操作很快,500ms的那个指令在前者执行完后才到达(比如显示一个fragmentB),就把刚才的在SearchView中监听到无文字时的操作给覆盖了。这时候可以加个boolean来判断下,如果为空就不允许再在handler中执行其他指令。

  2. searchView.onActionViewExpanded();表示在内容为空时不显示取消的x按钮,内容不为空时显示.我发现没有这段代码,x按钮默认就是有内容才显示的。这个不对啊,mSearchView.onActionViewCollapsed(); mSearchView.onActionViewExpanded();它们分别是设置SearchView默认是展开还是收缩的啊